【问题标题】:How can I compare columns from two csv files by key by Linux command line?如何通过 Linux 命令行按键比较两个 csv 文件中的列?
【发布时间】:2016-02-02 13:56:03
【问题描述】:

我有两个 CSV 文件:

hogehoge.csv

1,aaa,bbb
2,ccc,ddd
3,eee,fff
4,ggg,hhh
5,iii,jjj
6,kkk,lll
7,mmm,nnn
8,ooo,ppp
9,qqq,rrr
10,sss,ttt

hogehoge2.csv

1,aaa,bb
2,ccc,ddd
3,eee,fff
4,ggg,hhh
5,iii,jjj
7,mmm,nnn
8,ooo,ppp
9,qqq,rrr
10,sss,ttt

我想通过命令行(diff/cut/awk)得到这样的结果。

6,kkk,lll

第一行有区别,但我想忽略第一行的区别。

【问题讨论】:

  • 这个问题已经被问过很多次了。到目前为止,您尝试了什么?
  • diff hogehoge.csv hogehoge2.csv awk -F"," 'NR==FNR{c[$1]++;next};c[$1] == 0' hogehoge.csv hogehoge2。 csv 他们不收集。

标签: csv awk diff cut


【解决方案1】:

正如问题所述,您只想逐行比较两个文件。 comm 可能是个不错的选择:

comm -3 hogehoge.csv hogehoge2.csv

如果你想忽略每个文件的第一行:

comm -3 <(tail -n +2 hogehoge.csv) <(tail -n +2 hogehoge2.csv)

这将完全打印您指定的输出。注意:comm -3 将打印每个文件中不同的行,并且第二个文件中不同行的列表将使用制表符缩进。要删除标签:

comm -3 <(tail -n +2 hogehoge.csv) <(tail -n +2 hogehoge2.csv) | sed $'s/\t*//'

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多