我必须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的总和,它只读取每一行,但时间增加...
所以,如果你知道答案,请告诉我
答案 0 :(得分:3)
管道命令时,只要管道已满,它们就会并行运行。
所以我的猜测是,在第一个版本中,工作分布在您的CPU中,而在第二个版本中,所有工作都由一个核心完成。
您可以使用top
(或更好,htop
)来验证这一点。
出于好奇,这会更快吗? (另):
cut -f 19 -d' ' $1 | cut -f1 -d'/' | sort | uniq -c | sort -nr | head -n 100 > $2