比较unix命令行上的文件

比较unix命令行上的文件,unix,command-line,file,Unix,Command Line,File,假设我有两个文件,A和B,长度(A)>lengthOf(A)时,这可能会很困难,尽管我认为它可以用grep来驯服。为它编写一个自定义的awk脚本。使用head-c指定每个文件的字节数,然后比较它们 我认为这需要至少创建一个临时文件,但如果没有其他意见,我将不胜感激:)也许可以创建一个临时文件,其中包含长度为a的适当内容b 有点邪恶,但是: SIZE=`stat -c %s filea` head -c$SIZE fileb >tempfile diff filea tempfile EXI

假设我有两个文件,A和B,长度(A) 如果我执行“diff A B”,输出将是B文件中的所有“额外内容”,这没有抓住要点;我不在乎文件B中还有什么


如果我做“通信A B”,那么我必须目视检查“仅在A”列中是否没有显示任何内容。当lengthOf(B)>>lengthOf(A)时,这可能会很困难,尽管我认为它可以用grep来驯服。

为它编写一个自定义的awk脚本。

使用
head-c
指定每个文件的字节数,然后比较它们


我认为这需要至少创建一个临时文件,但如果没有其他意见,我将不胜感激:)

也许可以创建一个临时文件,其中包含长度为a的适当内容b

有点邪恶,但是:

SIZE=`stat -c %s filea`
head -c$SIZE fileb >tempfile
diff filea tempfile
EXIT=$?
rm tempfile
exit $EXIT

这似乎比创建临时文件要好得多:

SIZE=`stat -c %s filea`
cmp -s -n $SIZE filea fileb # -s for silence
检查退出状态以查看这些文件的第一个字节是否确实相等

更新:根据xk0der的要求,下面是一个较长的示例:

wormhole:tmp admp$ echo -n "fooa" > one # -n to supress newline
wormhole:tmp admp$ echo -n "foobc" > two
wormhole:tmp admp$ SIZE=`stat -c %s one`
wormhole:tmp admp$ echo $SIZE
4
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal"
not equal
wormhole:tmp admp$ echo -n "fooac" > two # first 4 bytes are equal now
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal"
equal
此外,在MacOS X中,您必须使用:

SIZE=`stat -f %z filename`

+1:不错!也许您可以添加一行关于如何测试存在状态“echo$?”或其他内容:)您可以使用“-”参数来区分。这实际上意味着“打开标准输入”:
head-c 100 a | diff-b
这将比较a中的前100个字节和b中的所有字节。
head -c`stat -c %s filea` fileb |diff -q filea -