我的代码遍历一个文件,并将第一列中的所有数字乘以一个数字.代码有效,但我认为它有点慢.它需要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)
老实说,你可以获得的最大加速来自于使用可以完成整个任务的单一语言.这主要是因为你的脚本为每一行调用了5个额外的进程,并且调用额外的进程很慢,但bash中的文本处理实际上并没有那么好地优化.
我推荐awk,因为你有它可用:
awk '{ print $1*0.000123981, $2 }'
Run Code Online (Sandbox Code Playgroud)
我相信你可以改进这个以跳过标题行并打印它而不做任何修改.
你也可以使用Perl,Python,C,Fortran和许多其他语言来做这类事情,尽管这种简单的计算不太可能有太大的区别.