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



我想检测我的哪个文件损坏了,损坏意味着文件中没有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.

使用wc -l:

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

使用gawk

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

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

最新更新