【问题标题】:grep from a log file to get countgrep 从日志文件中获取计数
【发布时间】:2012-11-05 01:25:00
【问题描述】:

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

【问题讨论】:

    标签: shell scripting awk grep sh


    【解决方案1】:
    perl -p -lne 's/merged./merged.\n/g' your_file|awk '{a+=$1}END{print a}'
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        你的 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
        

        【讨论】:

        • 它是否在您的计算机上显示 17500 作为输出...因为它正在我的打印 15000 :(....我不明白这是怎么发生的...无论如何 grep -v 很长日志脚本,除了合并部分。你想让我把它放在这里吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 2012-04-29
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多