2017-10-11 68 views
-6

我想比較兩個單獨文件的行數。儘管我已經在比較中嘗試使用wc -l,但我正在努力使其正常工作。如何使用IF/Then Bash命令比較2個文件中的行數

我:

if [ "$(wc -l file1.txt)" == "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi 

然而,如果/那麼語句不返回正確的輸出。

如果文件1和2具有相同的行數,那麼編寫此代碼的正確方法是什麼?

FILE1.TXT:

example1 
example2 
example3 

FILE2.TXT:

example4 
example5 
example6 

更新:我們發現,wc -l命令必須只針對比較返回一個數字。與Why should there be a space after '[' and before ']' in Bash?這個問題不同,這個問題需要使用wc -l來獲得一個整數,它可以與單獨文件中的行數進行比較。

回答

2

請你試試下面,讓我知道這是否有助於你。對於上面的代碼

if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi 

例子: 比方說,我們有以下Input_files:

cat file1.txt 
I 
am 
Cookie 

cat file2.txt 

I 
am 
Cookie 

現在,因爲我們可以看到的行數不同時的文件,所以下面的結果會相等。

if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi 
Warning: No Match! 

現在,如果我們使兩個文件的行現在如下所示相等。

cat file1.txt 
I 
am 
Cookie 
cat file2.txt 
I 
am 
Cookie 

現在,當我們運行相同的代碼時,它會給出如下。

if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi 
Match! 
+0

這對我的作品Ravinder。謝謝。 – DomainsFeatured

+0

@down投票人:請讓我知道投票的原因,以便我可以提高自己。 – RavinderSingh13

+1

我不是downvoter,但運行兩個命令替換並比較它們的輸出是代碼異味。我會嘗試將其重構爲一個更習慣的流程,也許只有一個'wc'或一個Awk腳本。 – tripleee

1

你需要有一個空間,在你的支架和你比較表達式之間:

if [ <expression> ]; then echo "Then Do Something"; fi 

所以你的情況這將是:

if [ "$(wc -l file1.txt)" -eq "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi 
+0

這會給出錯誤,因爲'!'存在於回顯中「,它具有特殊的含義,當你將'''改爲'''時,它應該是好的。 – RavinderSingh13

+0

啊謝謝澄清! – hackerrdave

+0

這個答案實際上不起作用,因爲'wc -l file1.txt'不返回整數。 – DomainsFeatured