gpt4 book ai didi

linux - 我如何比较两个在 unix 中有多个字段的文本文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:08 29 4
gpt4 key购买 nike

我有两个文本文件

  • 文件 1

    number,name,account id,vv,sfee,dac acc,TDID
    7000,john,2,0,0,1,6
    7001,elen,2,0,0,1,7
    7002,sami,2,0,0,1,6
    7003,mike,1,0,0,2,1
    8001,nike,1,2,4,1,8
    8002,paul,2,0,0,2,7
  • 文件 2

    number,account id,dac acc,TDID
    7000,2,1,6
    7001,2,1,7
    7002,2,1,6
    7003,1,2,1

我想比较这两个文本文件。如果文件 2 的四列在文件 1 中并且相等意味着我想要这样的输出

7000,john,2,0,0,1,6
7001,elen,2,0,0,1,7
7002,sami,2,0,0,1,6
7003,mike,1,0,0,2,1

nawk -F","'NR==FNR {a[$1];next} ($1 in a)' file2.txt file1.txt.. 这适用于比较两个单列在两个文件中。我想比较多列。有人有建议吗?


编辑:来自 OP 的评论:

nawk -F"," 'NR==FNR {a[$1];next} ($1 in a)' file2.txt file1.txt

.. 这适用于比较两个文件中的两个单列。我想比较多列。你有什么建议吗?

最佳答案

这个 awk 单行代码适用于未排序 文件的多列:

awk -F, 'NR==FNR{a[$1,$2,$3,$4]++;next} (a[$1,$3,$6,$7])' file1.txt file2.txt

为了使其工作,第一个用于输入的文件(在我的示例中为 file1.txt)必须是只有 4 个字段的文件,如下所示:

文件1.txt

7000,2,1,6
7001,2,1,7
7002,2,1,6
7003,1,2,1

文件2.txt

7000,john,2,0,0,1,6
7000,john,2,0,0,1,7
7000,john,2,0,0,1,8
7000,john,2,0,0,1,9
7001,elen,2,0,0,1,7
7002,sami,2,0,0,1,6
7003,mike,1,0,0,2,1
7003,mike,1,0,0,2,2
7003,mike,1,0,0,2,3
7003,mike,1,0,0,2,4
8001,nike,1,2,4,1,8
8002,paul,2,0,0,2,7

输出

$ awk -F, 'NR==FNR{a[$1,$2,$3,$4]++;next} (a[$1,$3,$6,$7])' file1.txt file2.txt
7000,john,2,0,0,1,6
7001,elen,2,0,0,1,7
7002,sami,2,0,0,1,6
7003,mike,1,0,0,2,1

或者,您也可以使用以下语法,它更接近您问题中的语法,但恕我直言,可读性不是很好

awk -F, 'NR==FNR{a[$1,$2,$3,$4];next} ($1SUBSEP$3SUBSEP$6SUBSEP$7 in a)' file1.txt file2.txt

关于linux - 我如何比较两个在 unix 中有多个字段的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186215/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com