计算跨多个文件的字段的唯一出现次数

时间:2015-07-31 09:19:32

标签: bash awk

我有大量的日志文件,其中每个文件都包含表单的记录......

2015-06-07 23:59:53 [uid:123] {success,1} .

对于每个文件,我想计算存在多少个唯一的UID。

所以在这个文件片段中我们看到了uids 123和124 ...

2015-06-07 23:59:53 [uid:123] {success,1}
2015-06-07 23:59:53 [uid:123] {success,1}
2015-06-07 23:59:53 [uid:123] {success,1}
2015-06-07 23:59:53 [uid:124] {success,1}

因此我对此文件的计数结果为 2

如何使用bash和/或awk获取数据?

我试过

cat 20150607.log | awk '{print $3}' | sort | uniq | wc -l

这很好用,但问题是我有这么多文件,我不想一个接一个地运行上面的命令。

是否有更简单的方法可以在多个文件中获取此计数?

1 个答案:

答案 0 :(得分:7)

ENDFILElength(array)使用GNU awk:

awk '{unq[$3]} ENDFILE{print FILENAME, length(unq); delete unq}' *.log

其他问题:

awk '
    !seen[FILENAME,$3]++ { unq[FILENAME]++ }
    END { for (i=1;i<ARGC;i++) print ARGV[i], unq[ARGV[i]]+0 }
' *.log