如何使用 awk 根据匹配的列向文件添加列并维护行的顺序

如何使用 awk 根据匹配的列向文件添加列并维护行的顺序

如何使用 awk 将文件中的列匹配到下一个文件并附加这些列(如果存在)。

文件一:

T36
T200
T77
T99
T100
T101
T110

文件2:

T36 aa  123
T36 aa  456
T200 cc 789
T99 aa  1011
T77 bb  1213
T77 bb  1415
T100 xx 1617

期望的输出:

T36 aa  123
T36 aa  456
T200    cc  789
T77 bb  1213
T77 bb  1415
T99 aa  1011
T100    xx  1617
T101
T110

在我的输出文件中,我想要获取文件 1 的顺序,并打印文件 2 中不存在的行。

到目前为止,我已经做到了这一点,但它只打印匹配的列,而不是全部。

awk 'NR == FNR { x[$1]=$1; next} { print x[$1], $0 }' file1 file2

请帮忙!

答案1

awk 'f==2 {map[$1] = ($1 in map) ? map[$1] ORS $0 : $0} 
     f==1 {print (($1 in map)? map[$1] : $1)}
' f=2 file2 f=1 file1

或使用相同的FNR==NR习语:

awk 'FNR==NR {map[$1] = ($1 in map) ? map[$1] ORS $0 : $0; next} 
     {print (($1 in map)? map[$1] : $1)}
' file2 file1

输出:

T36 aa  123
T36 aa  456
T200 cc 789
T77 bb  1213
T77 bb  1415
T99 aa  1011
T100 xx 1617
T101
T110

相关内容