Unix 哪一个处理速度更快?使用Awk或Cut打印列?

Unix 哪一个处理速度更快?使用Awk或Cut打印列?,unix,awk,Unix,Awk,我有大约1亿行和6个用空格隔开的字段,每个字段有7位数字 我喜欢删除第二个字段,可以通过以下方法实现 1. awk '{print $1,$3,$4,$5,$6}' input.txt 2. cut --delimiter=' ' --fields=1,3-6 input.txt 哪一个更快获得所需的输出?有没有办法确定过程的时间 谢谢你的帮助 有没有办法确定过程的时间 对。只需在代码之前预先输入命令time,它就会返回所花的时间。每个人都要这样做 time awk '{print $1,$

我有大约1亿行和6个用空格隔开的字段,每个字段有7位数字

我喜欢删除第二个字段,可以通过以下方法实现

1. awk '{print $1,$3,$4,$5,$6}' input.txt

2. cut --delimiter=' ' --fields=1,3-6 input.txt
哪一个更快获得所需的输出?有没有办法确定过程的时间

谢谢你的帮助

有没有办法确定过程的时间

对。只需在代码之前预先输入命令
time
,它就会返回所花的时间。每个人都要这样做

time awk '{print $1,$3,$4,$5,$6}' input.txt
time cut --delimiter=' ' --fields=1,3-6 input.txt
在这个场景中,通过快速的分析,看起来
cut
几乎没有胜出。对于
awk
来说,考虑到它在
cut
上的能力有多强,现在仍然是一个令人印象深刻的时刻

{1..1000}中i的$time;do cut--delimiter=''--fields=1,3-6>/dev/null
有没有办法确定过程的时间

对。只需在代码之前预先输入命令
time
,它就会返回所花的时间。每个人都要这样做

time awk '{print $1,$3,$4,$5,$6}' input.txt
time cut --delimiter=' ' --fields=1,3-6 input.txt
在这个场景中,通过快速的分析,看起来
cut
几乎没有胜出。对于
awk
来说,考虑到它在
cut
上的能力有多强,现在仍然是一个令人印象深刻的时刻


{1..1000}中i的$time;docut--delimiter=''--fields=1,3-6>/dev/null我已经对它进行了测试,结果是:

AWK更快

我使用约200万行的文件进行了测试:

它只是一个带有标准分隔符的剪切,并打印到文件中

如您所见,在这种情况下,AWK的速度约为3倍(您自己也可以试试)

演示:

# wc -l prueba
2088036 prueba    
# cat test.sh
date +%s
awk '{print $2}' prueba > ok
date +%s
cut -d" " -f2 prueba > ok2
date +%s
# ./test.sh
1484848197
1484848199
1484848204
这里有一些文档介绍了提高awk速度的原因:


希望它有帮助

我已经测试过了,结果是:

AWK更快

我使用约200万行的文件进行了测试:

它只是一个带有标准分隔符的剪切,并打印到文件中

如您所见,在这种情况下,AWK的速度约为3倍(您自己也可以试试)

演示:

# wc -l prueba
2088036 prueba    
# cat test.sh
date +%s
awk '{print $2}' prueba > ok
date +%s
cut -d" " -f2 prueba > ok2
date +%s
# ./test.sh
1484848197
1484848199
1484848204
这里有一些文档介绍了提高awk速度的原因:


希望它能有所帮助

使用head-10000 input.txt>input1000.txt获取更短的测试文件在不同的情况下“cut”是否能够保持不变?这里的相关参数是什么?这显示了如何使用
时间
,但不是以最佳方式。实用程序的循环开销和启动时间可能会掩盖实际实用程序的速度差异(尽管这些信息肯定不会完全丢失)。最好一次生成一个大的测试文件,并在没有循环的情况下运行计时比较。@Dennis Williamson如果您感兴趣的只是相对的差异,只要两个测试的开销相同,这应该无关紧要。但是,即使循环开销相同,两个实用程序的启动时间也可能不同。如果你在一个测试中启动1000次,而不是在实际使用中启动一次,那么可能会产生误导性的结果。使用head-10000 input.txt>input1000.txt作为较短的测试文件,在不同的情况下,“cut”是否能够保持不变?这里的相关参数是什么?这显示了如何使用
时间
,但不是以最佳方式。实用程序的循环开销和启动时间可能会掩盖实际实用程序的速度差异(尽管这些信息肯定不会完全丢失)。最好一次生成一个大的测试文件,并在没有循环的情况下运行计时比较。@Dennis Williamson如果您感兴趣的只是相对的差异,只要两个测试的开销相同,这应该无关紧要。但是,即使循环开销相同,两个实用程序的启动时间也可能不同。如果您在测试中启动1000次,而在实际使用中只启动一次,那么可能会产生误导性的结果。