因此,我有一个正在写入特定文件的Shell脚本。在该文件中,有一些行的格式类似于
Time taken: 123.45 ms
我想找到此特定行的每个实例,并在此文件中查找所有时间的均值。
编辑:所以有时我会动态地附加到文件中,例如sample.txt。我有时遇到的问题是awk有时会错过此格式的最后1或2个实例。我认为awk正在尝试访问文件并在文件完成写入之前进行读取,并且某处存在数据争用。将来如何避免这种情况?
答案 0 :(得分:0)
有很多选择:
awk '/Time taken: / { S+=$3; N++} END { printf ("%0.3f\n", S/N)}' sample.txt
/Time taken: /
-仅匹配的生产线S+=$3
-对字段3中的数字求和(如果您的行不仅是“花费时间:##。### ms”,您将需要适当地调整字段号N++
-数字匹配行与Perl类似:
perl -ae '$S+=$F[2],$N++ if /Time taken: /; END { print sprintf("%0.3f\n",$S/$N)}' sample.txt
两个步骤:
grep 'Time taken' sample.txt | awk '{ S+=$3} END { printf ("%0.3f\n", S/NR)}'
利用awk的行号NR