2014-09-27 42 views
0

我想出了如何比较两个文件并使用它的状态代码来查看文件是否相同。问题是,只有在比较区分大小写的情况下才有效。我使用了cmp命令的状态码。在Bash中,如何比较两个文件(不区分大小写)

我怀疑我会使用globbing(即“[Aa] [Bb] [Cc] [等等......]”)。但我不知道如何实现这个到cmp命令。

+0

你试过了吗?男士差评# – Abhi 2014-09-27 01:29:47

回答

2

有比较shell中的2个文件的工具。

diff -i file1 file2 
+0

这很完美 - 我不知道为什么我忽略了差异。谢谢一堆! – Jay 2014-09-27 01:57:17

+1

''diff'与'cmp'相比效率非常低,因为它遇到了计算delta的问题(一种在n^3的情况下性能最差的算法,如果使用内存的话)。 – 2014-09-27 03:04:21

3

远远高于diff快就是用cmp,为标准化案后:

#!/bin/bash 
# ^-- must not be /bin/sh, as process substitution is a bash/ksh/zsh feature 

if cmp -s <(tr [a-z] [A-Z] <file1) <(tr [a-z] [A-Z] <file2); then 
    echo "files are the same" 
else 
    echo "files differ" 
fi 

cmp -s是特别快,因为它可以为它找到的第一个差别,尽快退出。

这也是更高的内存效率 - 它通过tr操作(每个文件在任何给定时间不超过一个缓冲区的值)存储在内存中(同样,它只需要存储足够的内存立即缓冲和比较)。与diff类型的算法相比,该算法需要能够在文件中搜索以找到类似的部分,并因此具有远远超出cmpO(1)使用的IO或存储器要求。

相关问题