bash:虽然读得非常慢

时间:2015-06-25 11:29:58

标签: bash while-loop

据我所知,“while read”是如此之慢,因为它按字节顺序读取。 如果直线对我来说足够有效的方法吗?

我有一个文件data.txt,每行包含四个参数:

1 56 56 48
3 646 86 656
4 56 894 959
6 89 849 875

我希望对每一行执行操作(将每个值分配给变量以进行进一步处理)。

这就是我现在的表现:

cat data.txt | 
while read linewise; do
par0=`echo $linewise |awk '{print $1}'`; 
par1=`echo $linewise |awk '{print $2}'`;
par2=`echo $linewise |awk '{print $3}'`;
par3=`echo $linewise |awk '{print $4}'`;

echo $par0 $par1 $par2 $par3
done

但对于~1000行文件,这需要半分钟:

real    0m30.380s
user    0m7.996s
sys     0m11.820s

如何加快速度?

1 个答案:

答案 0 :(得分:5)

您可以通过删除所有管道和调用子shell来加快速度。以下内容大大简化了您的工作:

while read -r par0 par1 par2 par3; do 
  echo $par0 $par1 $par2 $par3
done < data.txt