【问题标题】:compare 2 files, print lines of second file in the order of first file比较2个文件,按第一个文件的顺序打印第二个文件的行
【发布时间】:2014-07-06 19:49:48
【问题描述】:

我有 2 个文件,

文件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
...

我想 打印 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 在引号中命中 ' 有没有办法忽略它并只读取引号内的名称?

【问题讨论】:

    标签: awk


    【解决方案1】:

    你已经接近了,试试

    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中找到这些行,以供以后打印。

    【讨论】:

    • 它可以工作,但我有一个问题,因为某些行中的第一个单词最后有一个空格,如 'alfa' 你知道克服它的方法吗?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2023-02-10
    • 2013-01-05
    • 2015-12-25
    • 1970-01-01
    相关资源
    最近更新 更多