使用awk将2个文件组合在一个列上但使用不同的列号

时间:2014-08-22 17:57:44

标签: awk

我的要求是将2个文件比作第一个文件的第2个字段和第2个文件的最后一个字段,第2个文件的匹配记录应该写入新文件。

任何人都可以为此提供解决方案吗?

文件1:

aaa,ABC123
bbb,ABC234
ccc,ABC789

file2的:

123,QWER124,HHHHH,YYYYY,ABC123
145,WWWW12,HHHTLR,IEIRJ,ABC2345
125,SJHJSD,HJHJ,OOOP,ABC789

所需的输出

123,ABC123,QWER124,HHHHH,YYYYY
125,ABC789,SJHJSD,HJHJ,OOOP

1 个答案:

答案 0 :(得分:2)

使用awk

awk '
BEGIN { FS = OFS = "," }
NR==FNR { fld[$2] = $1; next }
($2 in fld) { print $1, fld[$2], $2, $3, $4, $5 }
' file1 file2
123,aaa,ABC123,QWER124,HHHHH,YYYYY
125,ccc,ABC789,SJHJSD,HJHJ,OOOP

我们在BEGIN块中设置输入和输出字段分隔符。 FS=OFS=","将其设置为,NR==FNR允许我们首先读取file1。我们创建一个数组fld,它使用column2的键保存column1的值。完全读取file1后,我们将移至file2。我们检查数组中是否存在第二列。如果是,我们只按照您的输出打印它们。