这对你来说应该很容易。
以下是file1文件(一列)。
必须要有一个简单的一行代码来打印出文件1中与文件2不匹配的行。
以下是file1文件(一列)。
1
2
3
4
5
6
7
8
9
这里是文件2(两列)
2 yay
3 ups
4 wow
8 hey
必须要有一个简单的一行代码来打印出文件1中与文件2不匹配的行。
awk 'NR==FNR{a[$1]++;next;}!($0 in a)' file2 file1
或者使用-v参数与join命令结合,就像@Michael建议的那样:
join -v1 file1 file2
两者均将打印:
1
5
6
7
9
cut
和comm
来实现此操作:cut -d' ' -f1 file2 | comm -13 - file1
根据您对重复行的处理方式,您可能还需要考虑使用join
。
{ 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,然后删除具有重复键的行。
join
和comm
解决方案需要输入文件已排序,这在本问题中恰好是如此。awk
解决方案不关心是否已排序。 - glenn jackman