更快 bash 写入文件
Faster bash writing to file
我正在读取 bash 中的文件,取出值并将它们保存到另一个文件中。
该文件包含约 100k 行,读取和重写它们大约需要 25 分钟。
是否有更快的写入文件的方法,因为现在我只是遍历行,解析一些值并像这样保存它们:
while read line; do
zip="$(echo "$line" | cut -c 1-8)"
echo $zip
done < file_one.txt
一切正常,值被正确解析,我只想知道如何优化流程(如果我能的话)。
谢谢
bash 循环只会减慢它的速度(尤其是每次迭代调用一次外部程序 (cut
) 的部分)。您可以一次性完成所有操作 cut
:
cut -c 1-8 file_one.xt
如果您希望在满足某些条件时对行的子字符串进行操作,Awk 是为处理文本文件而构建的:
awk '{zip=substr([=10=], 1, 8)} zip == "my match" {print zip}' file_one.txt
在此示例中,substr([=11=], 1, 8)
表示 file_one.txt
的每行记录 ([=12=]
) 的字符 1 到 8。这些子串被赋值给zip
变量,只有在匹配文本"my match"
.
时才会打印
如果您不熟悉 Awk,并且经常需要操作大文件,我建议您花一些时间来学习它。 Awk 比 bash 读取循环加载速度更快、效率更高。博客 post - Awk in 20 Minutes - 是一个很好的快速介绍。
要节省更多处理大文件的时间,您可以使用名为 Mawk 的 Awk 优化速度版本。
每行调用一次 cut
是一个很大的瓶颈。使用子字符串扩展来获取每行的前 8 个字符。
while read line; do
zip=${line:0:8}
echo $zip
done < file_one.txt
我会接受这个,因为它只执行一次剪切:
while read line; do
echo $line
done < <(cut -c 1-8 file_one.txt)
我正在读取 bash 中的文件,取出值并将它们保存到另一个文件中。 该文件包含约 100k 行,读取和重写它们大约需要 25 分钟。
是否有更快的写入文件的方法,因为现在我只是遍历行,解析一些值并像这样保存它们:
while read line; do
zip="$(echo "$line" | cut -c 1-8)"
echo $zip
done < file_one.txt
一切正常,值被正确解析,我只想知道如何优化流程(如果我能的话)。
谢谢
bash 循环只会减慢它的速度(尤其是每次迭代调用一次外部程序 (cut
) 的部分)。您可以一次性完成所有操作 cut
:
cut -c 1-8 file_one.xt
如果您希望在满足某些条件时对行的子字符串进行操作,Awk 是为处理文本文件而构建的:
awk '{zip=substr([=10=], 1, 8)} zip == "my match" {print zip}' file_one.txt
在此示例中,substr([=11=], 1, 8)
表示 file_one.txt
的每行记录 ([=12=]
) 的字符 1 到 8。这些子串被赋值给zip
变量,只有在匹配文本"my match"
.
如果您不熟悉 Awk,并且经常需要操作大文件,我建议您花一些时间来学习它。 Awk 比 bash 读取循环加载速度更快、效率更高。博客 post - Awk in 20 Minutes - 是一个很好的快速介绍。
要节省更多处理大文件的时间,您可以使用名为 Mawk 的 Awk 优化速度版本。
每行调用一次 cut
是一个很大的瓶颈。使用子字符串扩展来获取每行的前 8 个字符。
while read line; do
zip=${line:0:8}
echo $zip
done < file_one.txt
我会接受这个,因为它只执行一次剪切:
while read line; do
echo $line
done < <(cut -c 1-8 file_one.txt)