我有帶有空格分隔字段的長文本文件:
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