据我所知,"while read"是如此之慢,因为它按字节顺序读取.如果直线对我来说足够了,是否有更有效的方法来做到这一点?
我有一个文件data.txt每行包含四个参数:
1 56 56 48
3 646 86 656
4 56 894 959
6 89 849 875
Run Code Online (Sandbox Code Playgroud)
等等
我想在每一行上执行一个操作(将每个值分配给一个变量进行进一步处理).
这是我现在这样做的方式:
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
Run Code Online (Sandbox Code Playgroud)
但对于~1000行文件,这需要半分钟:
real 0m30.380s
user 0m7.996s
sys 0m11.820s
Run Code Online (Sandbox Code Playgroud)
我怎样才能加快速度呢?
您可以通过删除所有管道和调用子shell来加快速度.以下内容大大简化了您的工作:
while read -r par0 par1 par2 par3; do
echo $par0 $par1 $par2 $par3
done < data.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |