比較兩個文件列

比較兩個文件列

我有帶有空格分隔字段的長文本文件:

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

相關內容