比较2个文件,按第一个文件的顺序打印第二个文件的行

时间:2014-05-18 23:09:42

标签: awk

我有2个文件,

文件1:

alfa     numbers numbers
vita     numbers numbers
gama   numbers numbers
delta    numbers numbers
epsilon numbers numbers
zita      numbers numbers
...

file2的:

'zita'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'misc'  keepnumbers keepnumbers keepnumbers
'alfa'    keepnumbers keepnumbers keepnumbers
...

我想 打印file2的行 其中第一个单词(在第一列) 匹配文件1的第一个单词(在第一列中),但保持第一个文件的顺序。 输出应该看起来像

'alfa'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'zita'    keepnumbers keepnumbers keepnumbers

我已经尝试了

awk 'NR==FNR{a[$1]++;next}a[$1]' file1 file2 > file3

但file3中的顺序与file2相同。 此外,awk命中了引号符号'有没有办法忽略它并只读取引号内的名字?

1 个答案:

答案 0 :(得分:0)

你很近,试试

awk -v q="'" 'NR==FNR{a[$1]=$0;next}{$1=q $1 q}$1 in a{print a[$1]}' file2 file1 > file3
  • 转义单引号很烦人,我们可以定义var q
  • 如果你想拥有file1的顺序,可以将file2保存在数组中,然后用file1检查
  • 将数组保存为a[$1]=$0,以便我们在file2中包含这些行,以便以后打印。