我该怎么做才能加快这个bash脚本的速度?

dhe*_*ess 0 bash time

我的代码遍历一个文件,并将第一列中的所有数字乘以一个数字.代码有效,但我认为它有点慢.它需要26.676秒(壁挂时间)才能通过一个包含2302行的文件.我使用的是2.7 GHz Intel Core i5处理器.这是代码.

#!/bin/bash

i=2
sed -n 1p data.txt > data_diff.txt #outputs the header (x  y)
while [ $i -lt 2303 ]; do
    NUM=`sed -n "$i"p  data.txt | awk '{print $1}'`
    SEC=`sed -n "$i"p  data.txt | awk '{print $2}'`
    NNUM=$(bc <<< "$NUM*0.000123981")
    echo $NNUM $SEC >> data_diff.txt
    let i=$i+1
done
Run Code Online (Sandbox Code Playgroud)

Dav*_*d Z 5

老实说,你可以获得的最大加速来自于使用可以完成整个任务的单一语言.这主要是因为你的脚本为每一行调用了5个额外的进程,并且调用额外的进程很慢,但bash中的文本处理实际上并没有那么好地优化.

我推荐awk,因为你有它可用:

awk '{ print $1*0.000123981, $2 }'
Run Code Online (Sandbox Code Playgroud)

我相信你可以改进这个以跳过标题行并打印它而不做任何修改.

你也可以使用Perl,Python,C,Fortran和许多其他语言来做这类事情,尽管这种简单的计算不太可能有太大的区别.