0

我有一个日志文件,我基本上将整个日志记录下来,将其切割成字符串,直到只剩下两个字段,在字段一上唯一排序,并在字段编号和字段 1 相同时对右侧的字段求和。例子

80 128 
443 40
80 100
25  20 
443 44
80 128 

结果将是

80 356
443 84
25  20

我遇到的问题是我删除的第一个字段不一致,有时输出看起来像:

80 128

有时是

80(LOCAL\randomuser) 128

所以我的输出最终看起来像

80 356
80(LOCAL\randomuser) 128
443 84
25  20

这是因为 80(LOCAL\randomuser) 是唯一行。

如何首先规范化第一个字段,以便 (LOCAL\randomuser) 从存在的行中删除,而没有 (LOCAL\randomuser) 的行保持不变。

4

3 回答 3

1

利用

awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input

即使用第一个字段作为键并添加最后一个字段。

如果在您的示例中第一个数字和 the 之间没有空格(,请告诉 awk 也拆分(

awk -F"[ (]+" '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input

输出:

$ awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input
25 20
80 356
443 84

另一种删除仅(LOCAL\randomuser)存在的方法,您可以使用sed

sed 's/(.*)//' input
于 2013-03-01T19:10:44.143 回答
1

或强制$1进入数字上下文:

awk '{A[$1+0]+=$NF} END{for (i in A) print i, A[i]}' file
于 2013-03-01T20:59:41.177 回答
0

grep -v将匹配不包含模式的行。在输出grep到达cut.

于 2013-03-01T19:07:13.433 回答