我想比较两个单独文件的行数。虽然我尝试在比较中使用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