#awk #text
#awk #текст
Вопрос:
У меня есть два файла:
01File:
1 2051
2 1244
7 917
X 850
22 444
21 233
Y 47
KI270728_1 6
KI270727_1 4
KI270734_1 3
KI270726_1 2
KI270713_1 2
GL000195_1 2
GL000194_1 2
KI270731_1 1
KI270721_1 1
KI270711_1 1
GL000219_1 1
GL000218_1 1
GL000213_1 1
GL000205_2 1
GL000009_2 1
и 02File:
1 248956422
2 242193529
7 159345973
X 156040895
Y 56887902
22 50818468
21 46709983
KI270728_1 1872759
KI270727_1 448248
KI270726_1 43739
GL000009_2 201709
KI270322_1 21476
GL000226_1 15008
KI270311_1 12399
KI270366_1 8320
KI270511_1 8127
KI270448_1 7992
Мне нужно объединить эти два файла на основе поля 01 и напечатать «0» в результирующих пустых полях.
Я пытался выполнить это с помощью следующей команды:
awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0 "t" a[$1]}' 01File 02File
Что приводит к следующему выводу:
1 248956422 2051
2 242193529 1244
7 159345973 917
X 156040895 850
Y 56887902 47
22 50818468 444
21 46709983 233
KI270728_1 1872759 6
KI270727_1 448248 4
KI270726_1 43739 2
GL000009_2 201709 1
KI270322_1 21476
GL000226_1 15008
KI270311_1 12399
KI270366_1 8320
KI270511_1 8127
KI270448_1 7992
Однако у меня возникли проблемы с адаптацией команды, чтобы иметь возможность печатать, в данном случае нулевое значение «0» в результирующих пустых полях, чтобы сгенерировать следующий вывод:
1 248956422 2051
2 242193529 1244
7 159345973 917
X 156040895 850
Y 56887902 47
22 50818468 444
21 46709983 233
KI270728_1 1872759 6
KI270727_1 448248 4
KI270726_1 43739 2
GL000009_2 201709 1
KI270322_1 21476 0
GL000226_1 15008 0
KI270311_1 12399 0
KI270366_1 8320 0
KI270511_1 8127 0
KI270448_1 7992 0
Я был бы признателен, если вы сможете направить меня в правильном направлении
Ответ №1:
Используйте условное выражение вместо a[1]
. Вместо пустой строки будет напечатано «0», если ни одна строка не совпадает.
awk 'FNR==NR{a[$1]=$2;next} {print $0 "t" ($1 in a? a[$1]: "0")}' 01File 02File
Также я упростил первое действие, так как есть только 2 поля.
Вывод:
1 248956422 2051
2 242193529 1244
7 159345973 917
X 156040895 850
Y 56887902 47
22 50818468 444
21 46709983 233
KI270728_1 1872759 6
KI270727_1 448248 4
KI270726_1 43739 2
GL000009_2 201709 1
KI270322_1 21476 0
GL000226_1 15008 0
KI270311_1 12399 0
KI270366_1 8320 0
KI270511_1 8127 0
KI270448_1 7992 0