用awk或sed比较两个文件

时间:2011-11-18 11:53:03

标签: shell text sed awk

这一定很容易

这是file1(一列)

1
2
3
4
5
6
7
8
9

这里是file2(两列)

2 yay
3 ups
4 wow
8 hey

必须有一个简单的衬垫才能打印出file1中与file2不匹配的行

3 个答案:

答案 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)

您可以合并cutcomm

来完成此操作
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,然后删除带有重复键的行。