如何在awk Shell中测量任务执行时间?解决time:not found报错
解决awk中执行任务的耗时测量问题
你遇到的报错是因为time是bash的shell关键字,而awk的system()函数默认调用/bin/sh执行命令,sh不识别time作为关键字,所以找不到该命令。以下是几种可行的解决方法:
方法1:让system调用bash执行命令
通过bash -c让bash来处理包含time的命令,这样就能正常使用time关键字:
echo 1 | awk '{system("bash -c \"time pwd\"")}'
注意这里的双引号需要转义,避免被awk解析。
方法2:使用外部time命令的绝对路径
如果系统中存在独立的time命令(通常路径是/usr/bin/time),可以直接用绝对路径调用:
echo 1 | awk '{system("/usr/bin/time pwd")}'
可以先执行which time确认是否存在该外部命令。
方法3:在awk内部计算耗时
不依赖shell的time,直接在awk里记录任务前后的时间戳并计算差值,这种方法更灵活,还能自定义输出格式:
秒级精度(通用awk支持)
echo 1 | awk '{ start = systime() system("pwd") end = systime() printf("任务耗时:%d 秒\n", end - start) }'
微秒级精度(需gawk支持)
如果需要更精确的计时,可以用gawk的gettimeofday函数:
echo 1 | gawk '{ gettimeofday(start) system("pwd") gettimeofday(end) elapsed = (end["sec"] - start["sec"]) + (end["usec"] - start["usec"])/1000000 printf("任务耗时:%.6f 秒\n", elapsed) }'
内容的提问来源于stack exchange,提问作者G WOLF
相关产品推荐
相关产品推荐

