我有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终止。
有什么想法吗?谢谢!
答案 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"