比较两个文件列

比较两个文件列

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

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

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

我努力了

join -v1 file1.txt file2.txt >output.txt

但输出有一些错误。任何awk/sed命令都值得赞赏。

答案1

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

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

join -v1 <(sort file1.txt) <(sort file2.txt)

答案2

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

$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848

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

分解一下:

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

相关内容