提取两个文件之间的差异值[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提取两个文件之间的差异值[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
在linux / shell环境中工作,我该如何完成以下任务:
文本文件1包含:
1
2
3
4
5
文本文件2包含:
6
7
1
2
3
4
我需要提取文件2中不在文件1中的条目。因此在此示例中为“6”和“7”,现在它们找到了它们。例如,文件1中的6,7
我已经使用了这个awk命令
awk 'FNR==NR{a[$0]++;next}!a[$0]' file1 file2
但是这个命令只能显示差异,所以,6和7,但不是它的结果。
我怎么能从命令行执行此操作?
非常感谢!
答案
使用awk你可以这样做:
awk 'FNR==NR { seen[$0]=FILENAME; next }
{if ($1 in seen) delete seen[$1]; else print $1, FILENAME}
END { for (i in seen) print i, seen[i] }' file{1,2}
6 file2
7 file2
5 file1
在遍历file1
时,我们将每行的column1存储在数组seen
中,其值为FILENAME
。接下来,在迭代file2
时,我们打印每个缺失的条目,并删除是否找到条目(常用条目)。最后在END
块中,我们打印数组seen
中的所有剩余条目。
另一答案
comm
程序将告诉您文件的共同点(或者对于一个文件是唯一的)。当文件按词汇顺序排序时,comm
效果最佳。
$ echo "only in file1"; comm -2 -3 <(sort file1) <(sort file2)
only in file1
5
$ echo "only in file2"; comm -1 -3 <(sort file1) <(sort file2)
only in file2
6
7
$ echo "common to file1 and file2"; comm -1 -2 <(sort file1) <(sort file2)
common to file1 and file2
1
2
3
4
以上是关于提取两个文件之间的差异值[重复]的主要内容,如果未能解决你的问题,请参考以下文章