我想比较两个单独文件的行数。虽然我在比较中尝试使用g3 = subtract (g1, g2);
should return
{"a", "c");
g4 = subtract (g2, g1);
should return
{"d", "e");
,但我很难让它正常运行。
我有:
wc -l
但是,if / then语句不会返回正确的输出。
如果文件1和2具有相同的行数,那么编写此代码的正确方法是什么?
FILE1.TXT:
if [ "$(wc -l file1.txt)" == "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi
FILE2.TXT:
example1
example2
example3
更新:我们发现example4
example5
example6
命令必须只返回一个数字用于比较。与问题Why should there be a space after '[' and before ']' in Bash?不同,此问题需要使用wc -l
来获取一个整数,该整数可以与单独文件中的行数进行比较。
答案 0 :(得分:4)
请您试着跟随并告诉我这是否对您有帮助。
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!
答案 1 :(得分:1)
您需要在括号和比较表达式之间留一个空格:
if [ <expression> ]; then echo "Then Do Something"; fi
所以在你的情况下,它将是:
if [ "$(wc -l file1.txt)" -eq "$(wc -l file2.txt)" ]; then echo "Warning: No Match!"; fi