如何使用 if/then bash 命令比较 2 个文件中的行数



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

我有:

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

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

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

文件1.txt:

example1
example2
example3

文件2.txt:

example4
example5
example6

更新:我们发现 wc -l 命令必须返回一个数字才能进行比较。与问题为什么在 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!
您需要

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

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

所以在你的情况下,它会是:

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

最新更新