我有Apache
日志文件access.log
,如何计算该文件中出现的行数?例如,结果cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'
是
a.php
b.php
a.php
c.php
d.php
b.php
a.php
我想要的结果是:
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
答案1
答案2
[your command] | sort | uniq -c | sort -nr
接受的答案几乎是完整的,您可能需要sort -nr
在末尾添加一个额外的内容,以将最常出现的行排在最前面
独特的选项:
-c, --count
prefix lines by the number of occurrences
种类选项:
-n, --numeric-sort
compare according to string numerical value
-r, --reverse
reverse the result of comparisons
在特定情况下,如果您要排序的行是数字,则需要使用sort -gr
而不是sort -nr
,请参阅评论
答案3
您可以使用关联数组awk然后-可选-种类:
$ awk ' { tot[$0]++ } END { for (i in tot) print tot[i],i } ' access.log | sort
输出:
1 c.php
1 d.php
2 b.php
3 a.php
答案4
只有 1 个样本d.php
。所以你会得到像这样的漂亮输出。
wolf@linux:~$ cat file | sort | uniq -c
3 a.php
2 b.php
1 c.php
1 d.php
wolf@linux:~$
当有 4 时会发生什么d.php
?
wolf@linux:~$ cat file | sort | uniq -c
3 a.php
2 b.php
1 c.php
4 d.php
wolf@linux:~$
如果您想按出现次数对输出进行排序,您可能需要sort
再次发送标准输出。
wolf@linux:~$ cat file | sort | uniq -c | sort
1 c.php
2 b.php
3 a.php
4 d.php
wolf@linux:~$
用于-r
反向
wolf@linux:~$ cat file | sort | uniq -c | sort -r
4 d.php
3 a.php
2 b.php
1 c.php
wolf@linux:~$
希望这个例子有帮助