我想diff
对2个文件执行一次操作,并使其在第一个区别处停止。我diff
当然不要求通过来完成命令,但是我确实要求一旦找到并报告了第一个差异,就停止实际的命令。我对一些运行非常大的文件,并期待一个完美的比赛,但还是想知道有什么不同,应该在一发现,所以diff -q
,diff ... |head -1
和cmp
是没有好处的。而且,由于文件非常大,所以不会耗尽内存的东西会很不错。尽管对于我当前的问题不是必需的,但对于第一个(用户指定的)n个差异有效的解决方案以及可以忽略空白差异的解决方案,可获得加分。
cmp
停在第一个区别:
% cat foo
foo
bar
baz
---
foo
bar
baz
% cat bar
foo
bar
baz
---
foo+
bar+
baz+
% cmp foo bar
foo bar differ: byte 20, line 5
%
您可以将脚本包装起来以打印不同的行:
#! /bin/bash
line=$(cmp "$1" "$2" | awk '{print $NF}')
if [ ! -z $line ]; then
awk -v file="$1" -v line=$line 'NR==line{print "In file "file": "$0; exit}' "$1"
awk -v file="$2" -v line=$line 'NR==line{print "In file "file": "$0; exit}' "$2"
fi
% ./script.sh foo bar
In file foo: foo
In file bar: foo+
现在,部分成本已转移到AWK命令,但它应该比完全检查两个文件都快得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句