虽然阅读速度非常慢
while read incredibly slow
据我了解,"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 }'`;
par1=`echo $linewise |awk '{print }'`;
par2=`echo $linewise |awk '{print }'`;
par3=`echo $linewise |awk '{print }'`;
echo $par0 $par1 $par2 $par3
done
但是对于大约 1000 行的文件,这需要半分钟:
real 0m30.380s
user 0m7.996s
sys 0m11.820s
我怎样才能加快速度?
您可以通过删除所有管道和对子 shell 的调用来加快速度。下面大大简化了你正在做的事情:
while read -r par0 par1 par2 par3; do
echo $par0 $par1 $par2 $par3
done < data.txt
据我了解,"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 }'`;
par1=`echo $linewise |awk '{print }'`;
par2=`echo $linewise |awk '{print }'`;
par3=`echo $linewise |awk '{print }'`;
echo $par0 $par1 $par2 $par3
done
但是对于大约 1000 行的文件,这需要半分钟:
real 0m30.380s
user 0m7.996s
sys 0m11.820s
我怎样才能加快速度?
您可以通过删除所有管道和对子 shell 的调用来加快速度。下面大大简化了你正在做的事情:
while read -r par0 par1 par2 par3; do
echo $par0 $par1 $par2 $par3
done < data.txt