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

Awk 比较两个文件,按第一个文件的顺序打印第二个文件的行,awk,Awk,我有两个文件 文件1: alfa numbers numbers vita numbers numbers gama numbers numbers delta numbers numbers epsilon numbers numbers zita numbers numbers ... 文件2: 'zita' keepnumbers keepnumbers keepnumbers 'gama' keepnumbers keepnumbers kee

我有两个文件

文件1:

alfa     numbers numbers
vita     numbers numbers
gama   numbers numbers
delta    numbers numbers
epsilon numbers numbers
zita      numbers numbers
...
文件2:

'zita'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'misc'  keepnumbers keepnumbers keepnumbers
'alfa'    keepnumbers keepnumbers keepnumbers
...
我想 打印文件2的行 其中第一个单词(在第一列中) 与文件1的第一个字匹配(在第一列中),但保持第一个文件的顺序。 输出应该如下所示

'alfa'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'zita'    keepnumbers keepnumbers keepnumbers
我已经试过了

awk 'NR==FNR{a[$1]++;next}a[$1]' file1 file2 > file3
但文件3中的顺序与文件2类似。 此外,awk点击引号符号“有没有办法忽略它并只读取引号内的名称?”如果您已接近,请尝试

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
    ,以便我们在文件2中有行,以便以后打印

它可以工作,但我有一个问题,因为某些行中的第一个单词末尾有一个空格,如“alfa”,你知道克服它的方法吗?非常感谢你!