У меня есть файл с 5 колонками:Использование если/другое заявление, в середине AWK
PS 6 15 0 1
PS 1 17 0 1
PS 4 18 0 1
, что я хотел бы получить его в этом формате 7-колонки:
PS.15 PS 6 N 1 0 1
PS.17 PS 1 P 1 0 1
PS.18 PS 4 N 1 0 1
Для создания 6 из 7 столбцов требуется просто захватить напрямую (а иногда и применять небольшую арифметику) из столбцов в исходном файле. Однако для создания одного столбца (столбец 4) требуется оператор if-else.
В частности, для создания новых столбцов 1, 2, 3, я использую:
cat File | awk '{print $1"."$3"\t"$1"\t"$2}'
и создавать новые столбцы 5, 6,7, я использую:
cat testFileB | awk '{print $4+$5"\t"$4/($4+$5)"\t"$5/($4+$5)}'
и для создания новый столбец 4, я использую:
cat testFileB | awk '{if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N";}'
Эти три оператора работает нормально независимо друг от друга и получить меня, что я хочу (правильные значения для столбцов все они разделены вкладками). Однако, когда я пытаюсь применить их одновременно (создайте сразу все 7 столбцов), я могу сделать это только с помощью нежелательных новых строк (вместо вкладок) до и после столбца 4 (столбец справки if/else):
например, моя попытка одновременно создавать столбцы 1, 2, 3, 4:
cat File | awk '{print $1"."$3"\t"$1"\t"$2; if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N";}'
результатов в нежелательных новых строк перед колонке 4:
PS.15 PS 6
N
PS.17 PS 1
P
PS.18 PS 4
Аналогично, моя попытка одновременно создавать столбцы 4, 5, 6, 7:
cat File | awk '{if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N"; print $4+$5"\t"$4/($4+$5)"\t"$5/($4+$5)}'
приводит к нежелательным новым линиям после колонки 4:
N
1 0 1
P
1 0 1
N
1 0 1
Есть ли решение, так что я могу создать все 7 столбцов сразу, и есть только вкладки между ними (нет новых линий)?
Спасибо за вашу помощь! Я был озадачен после поиска: o) – LanneR
Проиграть [бесполезное использование 'cat'] (http://partmaps.org/era/unix/award.html). – tripleee