我想检测我的哪个文件损坏了,损坏意味着文件中没有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,并打印行数和文件名