Answers:
您可以使用该comm
命令比较两个文件,并有选择地显示一个或另一个唯一的行或共同的行。它要求对输入进行排序,但是您可以使用流程替换对输入进行即时排序。
comm -13 <(sort old.txt) <(sort new.txt)
如果您使用的版本bash
不支持进程替换,则可以使用命名管道对其进行仿真。Wikipedia中显示了一个示例。
diff
会做同样的事情,对吗?
diff
将显示所有差异。comm
允许您选择是要查看文件1,文件2的行还是它们共同的行。
bash
它运行什么版本?它可能不支持流程替换。
我只会用grep
:
grep -vFf old new > extra_urls
-f
:告诉grep
您从文件中读取其搜索模式。在这种情况下,old
。-v
:告诉grep反转匹配项,只打印不匹配的行。 -F
:告诉grep将其搜索模式解释为字符串,而不是正则表达式。这样,.
URL的将按字面值进行匹配。结合起来,这些命令可以grep
打印new
不在中的任何行old
。文件中URL的顺序无关紧要。
-F
纯文本格式
由于订单对您很重要,因此请使用 awk
awk '
NR == FNR {old[$1]=1; next}
!($1 in old)
' old new > extra
> extra
为| sort > extra
。或者| sort -u > extra
如果您只希望一个新的url在输出中出现一次,而不管它在输入中出现了多少次。输入顺序可能会影响输出顺序,除非您在执行该操作的某处做了额外的工作以防止它发生。
comm
虽然grep -Fvf
也是很好的方法,但这是最好的答案
我有一个名为meld的应用程序。它允许并排查看两个(或三个)文件,显示差异,并允许选择性地从一个复制到另一个或删除字符。
可以从终端安装融合
sudo apt-get install meld