grep从日志文件中获取计数

时间:2012-11-16 10:19:40

标签: shell scripting awk grep sh

我必须从文件中获得一定的数量。我使用的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

3 个答案:

答案 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