大家好,我正在处理一个有大约500万行的日志文件,因此我使用linux中的awk shell。
我需要grep域名并在日志中获取前100个最高的域名,所以我写成了这样:
awk '{print $19}' $1 |
awk '{ split($0, string, "/");print string[1]}' |
awk '{domains[$0]++} END{for(j in domains) print domains[j], j}' |
sort -n | tail -n 100 > $2
它运行大约需要13秒钟
然后我像这样更改了脚本:
awk 'split($19, string, "/"); domains[string[1]]++}
END{for(j in domains) print domains[j], j}' $1 |
sort -n | tail -n 100 > $2
它运行了大约21秒
为什么呢?
你知道,一行awk shell命令可以减少cal的总和,它只读取每行一次,但时间会增加...
因此,如果你知道答案,请告诉我。