我有带有空格分隔字段的长文本文件:
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
命令表示赞赏。
为了使用join
,您需要确保 FILE1 和 FILE2在连接字段上排序。
以下命令应该可以解决问题:
join -v1 <(sort file1.txt) <(sort file2.txt)
Run Code Online (Sandbox Code Playgroud)
像这样,但它不包括标题行:
$ 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