我必须从文件中获得一定的数量。我使用的grep语句是这样的:
counter_pstn=0
completed_count_pstn=0
rec=0
for rec in `(grep "merged" update_completed*.log | awk '{print $1}' | sed 's/ //g' | cut -d':' -f2)`
do
if [ $counter_pstn -eq 0 ]
then
completed_count_pstn=$rec
else
completed_count_pstn=$(($completed_count_pstn+$rec))
fi
counter_pstn=$(($counter_pstn+1))
done
echo "Completed Orders PSTN Primary " $completed_count_pstn
但是日志文件包含以下格式的数据:
2500 rows merged.
2500 rows merged.
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.
2500 rows merged.
结果,它错过了一个合并的计数(例如,在输出的第4行)。如何修改grep或使用另一个函数来获取计数。请注意,2500号码可能适用于不同的日志。所以我们必须使用“行合并”模式来获取计数。我已经尝试了-o,-w grep选项,但它无法正常工作。
以上数据的预期输出:
17500
实际输出显示:
15000
答案 0 :(得分:2)
perl -p -lne 's/merged./merged.\n/g' your_file|awk '{a+=$1}END{print a}'
答案 1 :(得分:2)
只需使用awk和'。'作为记录分隔符,因为这似乎是你想要指示每条记录的结尾:
$ cat file
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.
$ awk -v RS='.' '/merged/{sum+=$1} END{print "sum=" sum}' file
sum=10000
答案 2 :(得分:0)
你的grep -V输出是什么?
无论如何,你可以不用grep来做到这一点:
sed 's/merged\./\n/g' file|awk '{x+=$1}END{print x}'
测试
kent$ echo "2500 rows merged.
2500 rows merged.
2500 rows merged.
2500 rows merged.2500 rows merged.
2500 rows merged.
2500 rows merged."|sed 's/merged\./\n/g'|awk '{x+=$1}END{print x}'
17500