在未排序的file1中显示file2中不存在的行

时间:2017-04-17 08:59:46

标签: linux bash shell

我有2个文本文件, file1 file2 。我需要输出 file2 中不存在的 file1 中的那些行。

两个文件中的行顺序不同, file2 中还有其他行,这些行无关紧要。

例如:

$ grep testme file1
chmod -f 644 /root/testme
chown -h root:root /root/testme

$ grep testme file2
chmod -f 777 /root/testme
chown -h dude:dude /root/testme

以上grep file1 中2行不同的示例,或者 file2 中不存在。这两个文件大约是5 MB。

在Linux Bash(RHEL 7)中使用以下过程

while read -r line; do
 [ "$(\grep "^$line\$" file2 )" ] || echo $line
done < file1

...显示器

chmod -f 644 /root/testme
chown -h root:root /root/testme
grep: Unmatched [ or [^`

......并且不会结束。这也需要很长时间。

我尝试了另一种方法,这种方法非常快,但只打印了2行中的一行:

$ fgrep -v -f file2 file1
chmod -f 644 /root/testme
$

为什么只显示1行?

2行位于文件中间的某个位置,由CR终止。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

非常感谢使用comm的帮助和建议,但同时我使用grep找到答案。我更喜欢grep,因为它比comm快得多,也不需要对输入进行排序。

$ fgrep -v -x -f file2 file1
chmod -f 644 /root/testme
chown -h root:root /root/testme

解决方案只是添加-x

  

-x仅选择与整行完全匹配的匹配

答案 1 :(得分:0)

combine也可以这样做:

myAttribute="value"