在使用AWK在生成的空字段上打印给定值时,如何合并两个文件?

在使用AWK在生成的空字段上打印给定值时,如何合并两个文件?,awk,text,Awk,Text,我有两个文件: 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

我有两个文件:

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
和文件:

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
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
但是,我无法调整命令,以便能够在生成的空字段上打印零“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   
GL000226_1  15008   
KI270311_1  12399   
KI270366_1  8320    
KI270511_1  8127    
KI270448_1  7992
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
如果您能让我朝着正确的方向前进,我将不胜感激。

请使用a代替
a[1]
。如果没有匹配的行,将打印“0”,而不是空字符串

awk'FNR==NR{a[$1]=$2;next}{print$0“\t”($1在a?a[$1]:“0”)01文件02文件
我还简化了第一个操作,因为只有两个字段

输出:

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