更快的bash文件写入速度

更快的bash文件写入速度,bash,parsing,read-write,Bash,Parsing,Read Write,我在bash中读取一个文件,取出值并保存到另一个文件中。 文件中有大约100k行,读取和重写这些行大约需要25分钟 是否有更快的写入文件的方法,因为现在我只需遍历这些行,解析一些值并按如下方式保存它们: while read line; do zip="$(echo "$line" | cut -c 1-8)" echo $zip done < file_one.txt 读行时;做 zip=“$(回显“$line”|剪切-C1-8)” echo$zip 完成

我在bash中读取一个文件,取出值并保存到另一个文件中。 文件中有大约100k行,读取和重写这些行大约需要25分钟

是否有更快的写入文件的方法,因为现在我只需遍历这些行,解析一些值并按如下方式保存它们:

while read line; do
   zip="$(echo "$line" | cut -c 1-8)"
   echo $zip
done < file_one.txt
读行时
;做
zip=“$(回显“$line”|剪切-C1-8)”
echo$zip
完成
一切正常,值解析正确,我只想知道如何优化流程(如果我可以的话)


谢谢

bash循环只会减慢它的速度(尤其是每次迭代调用外部程序(
cut
)一次的部分)。您可以在一次切割中完成所有操作:

cut -c 1-8 file_one.xt

如果您希望在某行的子字符串满足某些条件时对其执行操作,则Awk是为处理文本文件而构建的:

awk '{zip=substr($0, 1, 8)} zip == "my match" {print zip}' file_one.txt
在本例中,
substr($0,1,8)
表示
文件的每个行记录(
$0
)的字符1到8。这些子字符串被分配给
zip
变量,并且仅在匹配文本
“我的匹配”
时打印

如果您不熟悉Awk,并且经常需要处理大型文件,我建议您花一些时间来学习它。与bash读取循环相比,Awk的加载速度更快,效率更高。这篇博文是一篇好的、快速的介绍


为了在大文件上节省更多的时间,您可以使用一个名为Awk的速度优化版本。

每行调用一次
cut
是一个很大的瓶颈。使用子字符串展开来获取每行的前8个字符

while read line; do
   zip=${line:0:8}
   echo $zip
done < file_one.txt
读行时
;做
zip=${line:0:8}
echo$zip
完成
这将打印回每行的结果。我不确定原始代码中zip变量赋值的意义是什么。忘了提到:我正在使用循环,因为在这之后我将不得不检查其他一些值。另一个值必须根据其内容进行剪切(我必须添加一个“如果”)。好主意,但我不确定当我添加它时是否真的可以使用它…然后将它导入你的while循环。这将大大加快速度。Bash循环很慢,但更慢的是每次迭代都调用一个可执行文件,这就是您现在正在做的。请您进一步解释一下,我对这一点相当陌生哦,我现在明白了:)非常感谢!而读循环的速度却慢得可笑