比较两个文件列

jac*_*ack 6 sed awk perl join

我有带有空格分隔字段的长文本文件:

cat file1.txt
Id    leng  sal   mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534

cat file2.txt
Id    number
25671 34343 
76767 34234 
23343 23423 
66776 23343 

cat output.txt
Id    leng  sal   mon
44888 56565 45554 6868
77765 88688 87464 6848
Run Code Online (Sandbox Code Playgroud)

file1.txt有四列,file2.txt有两列。我想比较$1两个文件 ( file1.txt, file2.txt) 中的第一列 ( )并输出在file2.txt.

我试过了

join -v1 file1.txt file2.txt >output.txt
Run Code Online (Sandbox Code Playgroud)

但是输出有一些错误。任何awk/sed命令表示赞赏。

dog*_*ane 9

为了使用join,您需要确保 FILE1 和 FILE2在连接字段上排序

以下命令应该可以解决问题:

join -v1 <(sort file1.txt) <(sort file2.txt)
Run Code Online (Sandbox Code Playgroud)


bah*_*mat 5

像这样,但它不包括标题行:

$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848
Run Code Online (Sandbox Code Playgroud)

注意:我对此进行了调整以匹配示例输出,而不是您的描述。如果您想要其他方式,只需切换 file1 和 file2。

打破这个:

  • awk 只打印字段 1 file2.txt
  • grep -v 反转匹配(打印不匹配的行)
  • -f -告诉grep从文件中读取匹配模式列表,在本例中为-( STDIN),该文件是从awk