我有一个日志文件,我基本上记录了整个注销,切断字符串,直到只剩下两个字段,在字段1上唯一排序,并在字段编号和字段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)的行保持不变。
答案 0 :(得分:1)
使用
awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input
即使用第一个字段作为键并添加最后一个字段。
如果您的示例中第一个数字和(
之间没有空格,请告诉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
答案 1 :(得分:1)
或强制$1
进入数字背景:
awk '{A[$1+0]+=$NF} END{for (i in A) print i, A[i]}' file
答案 2 :(得分:0)
grep -v
将匹配不包含模式的行。在grep
之前将输出通过cut
进行管道传输。