水平和垂直比较两个文件内容

水平和垂直比较两个文件内容

我有两个文件:

File1 的内容如下:

1 2 3 4 5 6 7 8 10

File2 的内容如下:

1
2
3
4
5
6
7
8
9
10

我怎样才能找到两个文件之间的差异并打印出奇数,并说出它来自哪个文件。

例如,在本例中9仅出现在 File2 中,那么我如何运行命令并获取以下行的输出

9 is only in File2

答案1

如果您有干净的格式(空格 x 换行符),最简单的方法是将行转换为行,然后对它们进行比较,如下所示:

diff <( sed -e "s/ /\n/g" h.txt ) v.txt

哪里h.txt是横档,哪里v.txt是竖档

答案2

您可能想使用 (G)AWK:

要查找差异,请首先使用 AWK 将 file1.txt 转换为逐行表示形式,然后将结果通过管道传输到 diff:

gawk 'BEGIN {FS = " "} ; {for(i=1; i<=NF; i++) print $i}' file1.txt | diff file2.txt - 

答案3

有不止一种方法可以做到这一点;这里是comm.

首先是printf一个头来解释comm的输出 - 给出请求的文件名 - 然后comm在排序后的输入上运行,抑制两个文件中都存在的行(-3)。两个输入comm是过程替换,我使用 don_crissti 的tr建议将空格转换File1为换行符;然后将两个文件传递给sort,这comm需要。

printf "File1\tFile2\n"; comm -3  <(tr ' ' '\n' < File1 | sort)  <(sort File2)

样品运行

输入文件1:

1 2 3 4 5 6 7 8 10 11

输入文件2:

1
2
3
4
5
6
7
8
9
10

输出:

$ printf "File1\tFile2\n"; comm -3 <(sed 's/ /\n/g' File1 |sort ) <(sort File2)
File1   File2
11
        9

相关内容