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

Linux 如何使用IF/Then Bash命令比较两个文件中的行数,linux,bash,unix,if-statement,wc,Linux,Bash,Unix,If Statement,Wc,我想比较两个独立文件的行数。虽然我在比较中尝试使用了wc-l,但我仍在努力让它正常工作 我有: if [ "$(wc -l file1.txt)" == "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi 但是,if/then语句不会返回正确的输出 如果文件1和文件2的行数相同,那么编写此代码的正确方法是什么 File1.txt: example1 example2 example3 File2.txt: example4 e

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

我有:

if [ "$(wc -l file1.txt)" == "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi
但是,if/then语句不会返回正确的输出

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

File1.txt:

example1
example2
example3
File2.txt:

example4
example5
example6

更新:我们发现
wc-l
命令必须仅为比较返回一个数字。与此问题不同,此问题需要使用
wc-l
获得一个整数,该整数可以与单独文件中的行数进行比较。

请尝试以下内容,并告知我这是否有帮助

if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi
现在,因为我们可以看到两个文件中的行数不相等,所以下面的结果将出现

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[“$(wc-l
括号和比较表达式之间需要有一个空格:

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

这将导致错误,因为
以“和”的形式出现,它有一个特殊的含义,当您将
更改为
时,它应该是好的。啊,感谢您的澄清!这个答案实际上不起作用,因为
wc-l file1.txt
不返回整数。严格来说,double
=
也是错误的,尽管Bash允许它。更新为使用
-eq
这对我来说很有效。谢谢。@down-voter:请告诉我down-voter的原因,这样我才能提高自己。我不是down-voter,但运行两个命令替换并比较它们的输出是一种代码味道。我会尝试将它重构成一个更惯用的流程,也许是用一个
wc
或一个Awk脚本。@tripleee,没错,先生,即使我也同意。考虑以OP的方式提供解决方案(OP如何尝试),因此仅使用此解决方案。
if [ <expression> ]; then echo "Then Do Something"; fi
if [ "$(wc -l file1.txt)" -eq "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi