这一定很容易
这是file1(一列)
1
2
3
4
5
6
7
8
9
这里是file2(两列)
2 yay
3 ups
4 wow
8 hey
必须有一个简单的衬垫才能打印出file1中与file2不匹配的行
答案 0 :(得分:14)
awk 'NR==FNR{a[$1]++;next;}!($0 in a)' file2 file1
或使用-v加入,如@Michael建议:
join -v1 file1 file2
两者都会打印出来:
1
5
6
7
9
答案 1 :(得分:3)
您可以合并cut
和comm
:
cut -d' ' -f1 file2 | comm -13 - file1
您可能还会考虑join
,具体取决于您希望如何处理重复的行。
答案 2 :(得分:2)
此sed解决方案可能适合您:
{ seq 1 10; echo -e "2 yay\n3 ups\n4 wow\n8 hey"; } | sort -n |
sed '1{h;d};H;${x;s/\(\S\+\)\n\1[^\n]*\n//g;p};d'
1
5
6
7
9
10
说明:以数字方式对文件进行排序,然后使用sed
将文件粘贴到保留空间(HS)。在文件末尾交换到HS,然后删除带有重复键的行。