我有大约1亿行和6个用空格分隔的字段,每个字段都有7位数字。
我想删除第二个字段,可以使用以下
来实现1. awk '{print $1,$3,$4,$5,$6}' input.txt
2. cut --delimiter=' ' --fields=1,3-6 input.txt
哪一个更快获得所需的输出?有没有办法计算时间?
感谢您的帮助。
答案 0 :(得分:2)
有没有办法为这个过程计时?
是。只需在命令之前添加命令time
,它就会返回它所花费的时间。为每个人做。
time awk '{print $1,$3,$4,$5,$6}' input.txt
time cut --delimiter=' ' --fields=1,3-6 input.txt
通过快速分析,看起来cut
在这种情况下几乎没有胜出。 awk
考虑到cut
的能力有多强,这仍然是令人印象深刻的时间。
$ time for i in {1..1000}; do cut --delimiter=' ' --fields=1,3-6 >/dev/null <<<"one two three four five six seven"; done
real 0m4.074s
user 0m0.496s
sys 0m2.799s
$ time for i in {1..1000}; do awk '{print $1,$3,$4,$5,$6}' >/dev/null <<<"one two three four five six seven"; done
real 0m4.511s
user 0m0.728s
sys 0m3.165s
答案 1 :(得分:0)
我测试了它,结果是:
AWK更快
我用~2万行文件进行了测试:
它只是一个带有标准分隔符的剪切,并打印到文件。
正如你所看到的,在这种情况下,AWK的速度要快3倍(尝试自己一样)
<强>演示:强>
fow /home/admin/tei # wc -l prueba
2088036 prueba
fow /home/admin/tei # cat test.sh
date +%s
awk '{print $2}' prueba > ok
date +%s
cut -d" " -f2 prueba > ok2
date +%s
fow /home/admin/tei # ./test.sh
1484848197
1484848199
1484848204
fow /home/admin/tei #
这里有一些关于使awk更快的原因的文档:
希望有所帮助