Unix 如何计算文件内容差异?

Unix 如何计算文件内容差异?,unix,sed,grep,Unix,Sed,Grep,我有两个文件large\u input和subset\u input文件,它们的内容可以是 large\u输入 1 34 65 7643 hello we 65 we hello 34 subset\u输入 1 34 65 7643 hello we 65 we hello 34 在这种情况下,sort命令没有多大帮助,否则在diff之后对两个文件执行sort | uniq将非常有用 问题 在这种情况下,由于数据的内容而无法对其进行排序,那么最好的方法是什么 large\u input-

我有两个文件
large\u input
subset\u input
文件,它们的内容可以是

large\u输入

1
34
65
7643
hello
we
65
we
hello
34
subset\u输入

1
34
65
7643
hello
we
65
we
hello
34
在这种情况下,
sort
命令没有多大帮助,否则在
diff
之后对两个文件执行
sort | uniq
将非常有用

问题 在这种情况下,由于数据的内容而无法对其进行排序,那么最好的方法是什么

large\u input
-
subset\u input
哪个是

1
7643

有些shell不支持
您可以使用sed生成执行此任务的sed脚本:

sed -e 's#^#/^#' -e 's#$#$/d#' subset_input > sed_script
然后,将此sed脚本应用于大型_输入很容易:

sed -f sed_script large_input
如果您有bash,则无需临时文件即可完成:

sed -f <(sed -e 's#^#/^#' -e 's#$#$/d#' subset_input) large_input
sed-f这正是它的用途:

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

comm-23为什么
sort | uniq
不起作用?我完全按照你说的做了,得到了如下结论:
0a1>12a4>7643
作为差异。也许你想试试
sort-g
为什么
sort
没有帮助?它将按字典顺序对其进行排序,但这并不重要;如果您只想进行设置差异,那么确切的顺序应该无关紧要,只要它是一致的。
sort-g
成功了,谢谢@skjaidev。