比较linuxterminal中的两个文件
有两个名为“a.txt”和“b.txt”的文件都有一个单词列表。 现在我想检查哪些单词在“a.txt”中是多余的,而不是在“b.txt”中 。
我需要一个有效的algorithm,因为我需要比较两个字典。
如果你安装了vim,试试这个:
vimdiff file1 file2
要么
vim -d file1 file2
你会发现它太棒了。
sorting他们并使用comm
:
comm -23 <(sort a.txt) <(sort b.txt)
comm
比较(sorting)的input文件,并默认输出三列:a唯一的行,b唯一的行和两行中的行。 通过指定-1
, -2
和/或-3
,可以抑制相应的输出。 因此, comm -23 ab
只列出了一个唯一的条目。 我使用<(...)
语法即时对文件进行sorting,如果它们已经sorting,则不需要此文件。
您可以在Linux中使用diff
工具来比较两个文件。 您可以使用–changed-group-format和–unchanged-group-format选项来过滤所需的数据。
以下三个选项可以用来为每个选项select相关的组:
-
'%<'从FILE1中获取行
-
'%>'从FILE2中获取行
-
''(空string)用于从两个文件中删除行。
例如: diff – changed-group-format =“%<”–unchanged-group-format =“”file1.txt file2.txt
[root@vmoracle11 tmp]# cat file1.txt test one test two test three test four test eight [root@vmoracle11 tmp]# cat file2.txt test one test three test nine [root@vmoracle11 tmp]# diff --changed-group-format='%<' --unchanged-group-format='' file1.txt file2.txt test two test four test eight
尝试sdiff
( man sdiff
)
sdiff -s file1 file2
你也可以使用: colordiff :用颜色显示diff的输出。
关于vimdiff :它允许你通过SSH比较文件,例如:
vimdiff /var/log/secure scp://192.168.1.25/var/log/secure
摘自: http : //www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html
使用comm -13
(需要sorting的文件) :
$ cat file1 one two three $ cat file2 one two three four $ comm -13 <(sort file1) <(sort file2) four
如果你更喜欢git diff
的diff输出风格,你可以用--no-index
标志来比较不在git仓库中的文件:
git diff --no-index a.txt b.txt
使用几个文件大约200k的文件名string在每个文件中,我基准(与内置的time
命令)这种方法与其他一些答案在这里:
git diff --no-index a.txt b.txt # ~1.2s comm -23 <(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s
comm
似乎是迄今为止最快的,而git diff --no-index
似乎是差异式输出的最快方法。
这是我的解决scheme:
mkdir temp mkdir results cp /usr/share/dict/american-english ~/temp/american-english-dictionary cp /usr/share/dict/british-english ~/temp/british-english-dictionary cat ~/temp/american-english-dictionary | wc -l > ~/results/count-american-english-dictionary cat ~/temp/british-english-dictionary | wc -l > ~/results/count-british-english-dictionary grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english grep -Fxvf ~/results/common-english ~/temp/american-english-dictionary > ~/results/unique-american-english grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british-english