如何使用 IF/Then Bash 命令比较两个文件中的行数

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

我想比较两个单独文件的行数。虽然我尝试在比较中使用 wc -l,但我很难让它正常工作。

我有:

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

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

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

File1.txt:

example1
example2
example3

File2.txt:

example4
example5
example6

更新:我们发现wc -l命令必须return一个数字才可以比较。与题目Why should there be a space after '[' and before ']' in Bash?不同的是,这道题目需要用wc -l得到一个整数,可以比较单独文件的行数

能否尝试关注一下,如果对您有帮助,请告诉我。

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!

您的括号和比较表达式之间需要一个 space:

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

所以你的情况是:

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