如何检查一组文件中的行数是否不等于某个数字? (击)

时间:2015-08-04 13:25:49

标签: bash loops if-statement for-loop

我想检测我的哪个文件已损坏,并且通过损坏意味着该文件中没有102行。我希望我写的for循环输出一条错误消息,给我一个损坏文件的文件名。我的文件名为ethane1.log ethane2.log ethane3.log ... ethane10201.log。

for j in {1..10201} do if [ ! (grep 'C 2- C 5' ethane$j.log | cut -c 22- | tail -n +2 | awk '{for (i=1;i<=NF;i++) print $i}'; done | wc -l) == 102] then echo "Ethane$j.log is corrupt." fi done

当文件没有损坏时,输入:

grep 'C 2- C 5' ethane$j.log | cut -c 22- | tail -n +2 | awk '{for (i=1;i<=NF;i++) print $i}'; done | wc -l

返回:

102

或者它是另一个数字。

唯一的问题是,我不确定if构造的语法(如何从wc -l的102输出创建变量,然后如何检查它是否等于或等于102) 。)

示例输出将是:

Ethane100.log is corrupt.
Ethane2010.log is corrupt.
Ethane10201.log is corrupt.

2 个答案:

答案 0 :(得分:3)

要计算线数,请使用wc -l

wc -l ethane*.log | grep -v '^ *102 ' | head -n-1
  • grep -v删除匹配的行
  • ^匹配行的开头
  • space*匹配任意数量的空格(0或更多)
  • head删除了一些尾随行
  • -n-1删除最后一行(total

答案 1 :(得分:1)

使用gawk

awk 'ENDFILE{if(NR!=102)print NR,FILENAME}' ethane*.log

在每个文件的末尾,检查行数不是102,并打印行数和文件名。