开发者社区> 问答> 正文

将file1中的一列与File2中的两列进行比较

我有两个文件:file1.txt和file2.txt

#file1.txt
xap1
NM_121
abc4
xxx0
uvw


#file2.txt
A123  001  xap1    mmmmm
B123       xxx0    nnnnn
C123  003  yyy1    ppppp
D123  004  zzz1    NM_121
E123  005  abc4    llllll
F123       jjjj    www

我想要以下输出基于文件1的列1与文件2的列3和列4的匹配,从文件2获取列2并打印两者:

#file3.txt
xap1    001
NM_121  004
abc4    005
xxx0    NA
uvw     NA

展开
收起
祖安文状元 2020-01-16 17:06:04 617 0
1 条回答
写回答
取消 提交回答
  • $ cat tst.awk
    BEGIN { FS=OFS="\t" }
    NR==FNR {
        map[$3] = map[$4] = ($2 == "" ? "NA1" : $2)
        next
    }
    { print $1, ($1 in map ? map[$1] : "NA2") }
    
    $ awk -f tst.awk file2 file1
    xap1    001
    NM_121  004
    abc4    005
    xxx0    NA1
    
    

    我使用了2个不同的NA值来区分$ 1在文件2中存在但条目为空的情况(例如xxx0)与在file2中不存在$ 1的情况,例如foobar:

    $ cat file1
    xap1
    NM_121
    abc4
    xxx0
    foobar
    
    $ awk -f tst.awk file2 file1
    xap1    001
    NM_121  004
    abc4    005
    xxx0    NA1
    foobar  NA2
    
    2020-01-16 17:06:15
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载