您的命令可以写得更好一些(假设您正在重新构建记录),这可能会提高一些性能:
awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,256) }' file > newFile
如果您可以访问多核机器(您可能会这样做),则可以使用GNU parallel。你可能想要改变你使用的核心数量(我在这里设置了 4 个)和提供给 awk 的块大小(我已经设置为 2 MB)...
< file parallel -j 4 --pipe --block 2M -q awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,2) }' > newFile
以下是我在我的系统上使用 2.7G 文件进行的一些测试,该文件有 1 亿行,块大小为 2M:
time awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,2) }' file >/dev/null
结果:
real 1m59.313s
user 1m57.120s
sys 0m2.190s
单核:
time < file parallel -j 1 --pipe --block 2M -q awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,2) }' >/dev/null
结果:
real 2m28.270s
user 4m3.070s
sys 0m41.560s
四核:
time < file parallel -j 4 --pipe --block 2M -q awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,2) }' >/dev/null
结果:
real 0m54.329s
user 2m41.550s
sys 0m31.460s
十二核:
time < file parallel -j 12 --pipe --block 2M -q awk 'BEGIN { FS=OFS="\t" } { $4 = substr($4,0,2) }' >/dev/null
结果:
real 0m36.581s
user 2m24.370s
sys 0m32.230s