我想检测我的哪个文件已损坏,并且通过损坏意味着该文件中没有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.
答案 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,并打印行数和文件名。