如何比较两个文件中的数据以识别通用数据和唯一数据?我无法逐行执行此操作,因为我有文件 1,其中包含 100 个 id/codes/number-set,我想将文件 2 与文件 1 进行比较。
事实是,文件 2 包含文件 1 中的数据子集以及文件 2 独有的数据,例如:
file 1 file 2
1 1
2 a
3 2
4 b
5 3
6 c
我如何比较两个文件以识别每个文件中共有和唯一的数据?diff
似乎无法完成这项工作。
答案1
无论你的 file1 和 file2 是否排序,使用awk命令如下:
file1 中的唯一数据:
awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1
4
5
6
file2 中的唯一数据:
awk 'NR==FNR{a[$0];next}!($0 in a)' file1 file2
a
b
c
公共数据:
awk 'NR==FNR{a[$0];next} ($0 in a)' file1 file2
1
2
3
解释:
NR==FNR - Execute next block for 1st file only
a[$0] - Create an associative array with key as '$0' (whole line) and copy that into it as its content.
next - move to next row
($0 in a) - For each line saved in `a` array:
print the common lines from 1st and 2nd file "($0 in a)' file1 file2"
or unique lines in 1st file only "!($0 in a)' file2 file1"
or unique lines in 2nd file only "!($0 in a)' file1 file2"
答案2
这是什么comm
适用于:
$ comm <(sort file1) <(sort file2)
1
2
3
4
5
6
a
b
c
第一列是仅出现在文件 1 中的行
第二列是仅出现在文件 2 中的行
第三列是两个文件共有的行
comm
要求对输入文件进行排序
到排除任何列出现,请添加带有该列号的选项。例如,要仅查看共有的行,请使用comm -12 ...
或仅在 file2 中出现的行,comm -13 ...
答案3
xxdiff
如果您只需要以图形方式查看两个文件(或目录)之间的变化,那么这是无与伦比的:
与常规diff
和一样comm
,您的输入文件应该首先排序。
sort file1.txt > file1.txt.sorted
sort file2.txt > file2.txt.sorted
xxdiff file1.txt.sorted file2.txt.sorted