2014-09-27 43 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或存儲器要求。

相關問題