如何计算文件内容的区别?

时间:2012-11-12 19:48:49

标签: unix sed grep

我有两个文件large_inputsubset_input文件,其内容可能是

large_input

1
34
65
7643
hello
we

subset_input

65
we
hello
34

在这种情况下,sort命令不是很有帮助,否则sort | uniq之后的diff两个文件都非常有用

问题 在这样的情况下,数据无法排序(由于其内容),最好的方法是找出

large_input - subset_input

1
7643

3 个答案:

答案 0 :(得分:1)

diff <(sort file1) <(sort file2) | sed '/^[0-9][0-9]*[acd][0-9]*/d;s/^[<>] //'

适合我,

输出:

1
7643

有些shell不支持<(sort fileX),因此您可能必须预先存档文件文件,如sort -o file1 file1; sort file -o file2 file2; ....

sed表达式删除diff的输出。要查看它正在做什么,首先要完全删除sed,一次删除add back 1部分(以分号分隔)。

我希望这会有所帮助。

答案 1 :(得分:1)

这正是comm的用途:

comm -23 <(sort large_input) <(sort subset_input)

答案 2 :(得分:0)

您可以使用sed生成执行该作业的sed脚本:

sed -e 's#^#/^#' -e 's#$#$/d#' subset_input > sed_script

然后将此sed脚本应用于large_input很简单:

sed -f sed_script large_input

如果你有bash,可以在没有临时文件的情况下完成:

sed -f <(sed -e 's#^#/^#' -e 's#$#$/d#' subset_input) large_input

此解决方案仅适用于“合理”的subset_input。虽然大小。