ls -lh access.log-rw-rw-r-- 1 keke keke 9.8G May 12 08:47 access.log
为了实验的准确性,我选择了同一台主机,环境完全一致,每一个测试开始之前我也都清空了文件缓存(缓存影响非常大)。
syncecho 3 > /proc/sys/vm/drop_caches
time sed -n '1,$p' access.log >/dev/nullreal 1m27.401suser 0m10.555ssys 0m12.987stime sed -n '100000p' access.logreal 1m27.377suser 0m5.478ssys 0m11.267s
time awk '{print $0}' access.log >/dev/nullreal 1m28.749suser 0m11.827ssys 0m10.616time awk 'NR==100000{print $0}' access.logreal 1m27.506suser 0m11.386ssys 0m10.578s
time while read line;do echo $line >/dev/null;done < access.logreal 45m6.354suser 39m43.833ssys 5m21.525
time cat access.log >/dev/nullreal 1m27.954suser 0m0.036ssys 0m9.583stime cat access.log |grep "10.120.0.81 | 30/Aug/2019:15:21:08 +0800"real 1m27.926suser 0m4.305ssys 0m13.246s
time head -32818237 access.log >/dev/nullreal 1m27.371suser 0m9.494ssys 0m10.744stime head -100000 access.log |tail -1real 0m0.246suser 0m0.027ssys 0m0.096s
time tail -32818237 access.log >/dev/nullreal 21m54.679suser 0m3.554ssys 1m5.696s
可以看到,linux常用的几个文本命令效率都差不多,对于简单的显示指定行,用head+tail的方式效率很高。当然,sed和awk有着强大的特殊功能,这些命令都是行处理的,不用担心把内存用尽。
文章转载自爱可可的人生记录仪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




