У меня есть два файла:

01Файл:

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

И 02 Файл:

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

Буду признателен, если ты сможешь направить меня в правильном направлении

3
Rodolfo Aramayo 4 Окт 2020 в 01:53

1 ответ

Лучший ответ

Используйте условное выражение вместо {{X0 }}. Вместо пустой строки будет напечатан «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
2
thanasisp 3 Окт 2020 в 23:02