我有大量的日志文件,其中每个文件都包含表单的记录......
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
这很好用,但问题是我有这么多文件,我不想一个接一个地运行上面的命令。
是否有更简单的方法可以在多个文件中获取此计数?
答案 0 :(得分:7)
对ENDFILE
和length(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