bash - 虽然阅读速度非常慢

标签 bash while-loop

据我了解,“读取时”非常慢,因为它是按字节读取的。 如果逐行对我来说足够了,是否有更有效的方法来做到这一点?

我有一个文件 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

如何加快速度?

最佳答案

您可以通过删除所有管道和对子 shell 的调用来加快速度。下面大大简化了您正在做的事情:

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

关于bash - 虽然阅读速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049107/

相关文章:

java - while 循环后的代码不接受输入 [Java]

linux - 启动时检查哪个配置文件设置了我的 PATH

bash - 使用 AWK 在第二列中找到大于 x 的最小数字

PHP:while循环中的foreach只返回一个结果

php - 使用 while/foreach 构建复杂的表

java - 使用标准输入的 While 循环

regex - find -regex 比 find | 慢grep

linux - CENTOS - 用于从目录启动文件传输的 Bash 脚本

bash - azure 管道模板如何引用位于同一模板存储库中的文件?

c# - 在c#中使用while循环,在两个num之间进行计数,仅打印可被第三个num整除的num