我有两个文件large_input
和subset_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
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,一次添加 1 个部分(由分号分隔)。
我希望这有帮助。
这正是comm
为:
comm -23 <(sort large_input) <(sort subset_input)
您可以使用 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
但是,此解决方案仅适用于“合理”大小的子集输入。