关于linux:如何使用IF / Then Bash命令比较2个文件中的行数

How To Compare Number Of Lines In 2 Files Using IF/Then Bash Command

本问题已经有最佳答案,请猛点这里访问。

我想比较两个单独文件的行数。当我尝试使用wc -l进行比较时,我正在努力使它正常工作。

我有:

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

但是,if/then语句没有返回正确的输出。

如果文件1和文件2的行数相同,那么编写此代码的正确方法是什么?

文件1.txt:

1
2
3
example1
example2
example3

文件2.txt:

1
2
3
example4
example5
example6

更新:我们发现wc -l命令只能返回一个数字进行比较。与问题不同的是,为什么在bash的"["后面和"]"之前应该有一个空格?,这个问题需要使用wc -l得到一个整数,可以比较单独文件中的行数。


你能试着跟我说一下吗?如果这对你有帮助的话,请告诉我。

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

上述代码示例:假设我们有以下输入文件:

1
2
3
4
5
6
7
8
9
10
cat file1.txt
I
am
Cookie

cat file2.txt

I
am
Cookie

既然我们可以看到两个文件中的行数不相等,那么下面的结果就会出现。

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

现在,如果我们使两个文件的行相等,如下所示。

1
2
3
4
5
6
7
8
cat file1.txt
I
am
Cookie
cat file2.txt
I
am
Cookie

现在,当我们运行相同的代码时,它将给出如下的结果。

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


您需要在括号和比较表达式之间留出一个空格:

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

因此,在您的情况下,它将是:

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