long文件减去短文件等于遍历每一行的新文件

时间:2011-12-08 20:09:39

标签: bash shell awk grep

我正在尝试打击脚本,似乎我在问这个问题是错的,或者找不到一个精致的例子。

我正在拍摄两个有列表的文件。

file1

aa
bb
cc
dd
ee
ff

file2

bb
dd
ff

创建file3 = file1行 - (file2file1中任意点的匹配行

file3

aa
cc
ee

感谢您的帮助或指导。

3 个答案:

答案 0 :(得分:3)

怎么样

 fgrep -v -f file2 file1

答案 1 :(得分:1)

如果可以使用这些文件,可以使用:

comm -2 -3 <(sort file1) <(sort file2)

我认为描述你想要的东西的雄辩方式是相对补充或设定差异。实际上,wikipedia page for complment包含许多语言的代码示例,包括上面的解决方案,没有内联排序。

答案 2 :(得分:1)

如果file2中的每一行都出现在file1中,则相当容易:

 sort file1 file2 | uniq -u

如果文件无法排序且您不知道上述条件是否为真(关于每一行),awk可以这样做:

awk 'BEGIN { while ((getline line < "file2" > 0) {
                   f2[line]++
             }
           }
     f2[$0] > 0 { print }' file1

注意:我不会将它用于非常大的file2