Linux命令行查找并添加数字

时间:2016-01-14 17:01:46

标签: linux command-line grep sum substring

在可能包含不同形式信息的日志文件中,我只需要grep那些包含子串“ABC”的行,然后在所选行中提取(它总是存在)最后的Kb数(模式是“ :%n Kb“,其中%n是0和以上的数字)。最后,我需要将所有值相加以获得应用程序使用的内存量。

2016-01-14T16:15:01.695Z [INFO] application - ABC 5f18dda7-a30a-44f5-82dd-69d4b5469245: 118 Kb
2016-01-14T16:15:04.535Z [INFO] application - 5f18dda7-a30a-44f5-82dd-69d4b5469245

3 个答案:

答案 0 :(得分:1)

grep不是动词,但awk是!

awk '/ABC/ {s+= $(NF-1)} END {print s "Kb"}'

应该工作(未经测试)

答案 1 :(得分:1)

您可以使用以下链:

$('#numRepeat').on('change keyup input', function () {  
  var el = $(".repeat-me").get(0);
  var numRepeat = $("#numRepeat").val();

  for(var i = 1;i < numRepeat;i++){    
    var newEl = $(el).after(el.cloneNode(true));   
  }
}).change();

答案 2 :(得分:0)

  

我只需要grep那些包含子串“ABC”的行,然后在所选行中提取(它总是存在)最后的Kb数

这看起来像是awk的工作。这个数字总是第二列,awk可以轻松提取:

awk '/ABC/ { print $(NF-1) }' filename_here

此处NF-1是倒数第二列的索引,$获取该列中的值。

但是你要总结一下,而不仅仅是提取。这是一项简单的任务,它展示了awk的更高级用法:

awk '
    BEGIN { sum = 0; }
    /ABC/ { sum += $(NF-1); }
    END { print sum; }
' filename_here

从技术上讲,你可以省略整个BEGIN行,但我认为预先在程序中使用的变量是预先设定的好方式。