微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何按顺序打印包含某些字符串的行?

我有两个文件

文件indv

copDGene_P51515
copDGene_V67803
copDGene_Z75868
copDGene_U48329
copDGene_R08908
copDGene_E34944

档案数据

    copDGene_Z75868  1   
    copDGene_A12318  3
    copDGene_R08908  5
    copDGene_P51515  8
    copDGene_U48329  2
    copDGene_V67803  8
    copDGene_E34944  2
    copDGene_D29835  9

我想按照indv的顺序打印包含indv中字符串的行,如下所示

copDGene_P51515  8
copDGene_V67803  8
copDGene_Z75868  1
copDGene_U48329  2
copDGene_R08908  5
copDGene_E34944  2

我试着用

awk 'NR==FNR{a[$1]++;next} ($1 in a)' indv data

但是我得到了

        copDGene_Z75868  1   
        copDGene_R08908  5
        copDGene_P51515  8
        copDGene_U48329  2
        copDGene_V67803  8
        copDGene_E34944  2

这不是indv的顺序.

解决方法:

$awk 'FNR==NR{a[$1]=$0;next;} {print a[$1]}' data indv
copDGene_P51515  8
copDGene_V67803  8
copDGene_Z75868  1
copDGene_U48329  2
copDGene_R08908  5
copDGene_E34944  2

这个怎么运作

> FNR == NR {a [$1] = $0;下一个;}

对于第一个文件读取数据,在第一个字段的索引下保存关联数组a中的每一行,$1.跳过其余命令,然后从下一行开始.
>打印[$1]

如果我们到这里,我们正在处理第二个文件,indv.对于此文件,从与此行上第一个字段对应的数据中打印每一行.这样,每行的内容由数据控制,但打印顺序由indv控制.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐