我有两个文件:
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