我有两个文件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
答案 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。虽然大小。