更快的bash写入文件

时间:2015-06-11 08:34:01

标签: bash parsing read-write

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

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

while read line; do
   zip="$(echo "$line" | cut -c 1-8)"
   echo $zip
done < file_one.txt

一切正常,值正确解析,我只想知道如何优化过程(如果可以的话)。

由于

4 个答案:

答案 0 :(得分:4)

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

cut -c 1-8 file_one.xt

答案 1 :(得分:2)

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

while read line; do
   zip=${line:0:8}
   echo $zip
done < file_one.txt

答案 2 :(得分:1)

如果您希望在符合某些条件的情况下对行的子字符串执行操作,则构建Awk以处理文本文件:

awk '{zip=substr($0, 1, 8)} zip == "my match" {print zip}' file_one.txt

在此示例中,substr($0, 1, 8)表示$0的每个行记录(file_one.txt)的字符1到8。这些子字符串分配给zip变量,仅在匹配文本"my match"时打印。

如果您不熟悉Awk,并且经常需要操作大文件,我建议花一些时间来学习它。与bash读取循环相比,awk的加载速度更快,效率更高。博客文章 - Awk in 20 Minutes - 是一个很好的,快速的介绍。

要为大文件留出更多时间,您可以使用名为Mawk的优化速度版Awk。

答案 3 :(得分:1)

我会这样做,因为它只执行一次剪切:

while read line; do
   echo $line
done < <(cut -c 1-8 file_one.txt)