比较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 

尝试sdiffman 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