2017-10-11 36 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