当您处理大文件时,读取行非常慢。我从谷歌找到的一般建议是使用 awk,但是如何将以下 while
转换为 awk
?
while read r; do
html[$dId]+=$(echo -e "\n$r")
stopList $(echo -e "$r" | tr -d ' ') all
done <<< "$list"
我尝试过的
awk '{
html[$dId]+=$(echo -e "\n$0")
stopList $(echo -e "$0" | tr -d ' ') all
}' <<< "$list"
最佳答案
它之所以慢是因为它每次迭代运行多个进程:
while read r; do
html[$dId]+=$(echo -e "\n$r")
stopList $(echo -e "$r" | tr -d ' ') all
done <<< "$list"
有:2 个 echos,一个 tr
,和 stopList
函数,我们甚至不知道它做了什么。
要将其转换为 awk
,您需要重新考虑一下,如下所示:
html[$dId]=$(awk '{ printf("\n%s", $0) }' <<< "$list")
也就是说,不是逐行附加到 html
,awk
应该生成整个内容。在单个 awk
进程中,您可以进行非常强大的文本处理,这将比多个 echo
、tr
等更有效例如在 shell 中。
我的示例不包括 stopList
,因为您没有解释它的作用。无论它做什么,您都需要在 awk
中实现它,以便它可以在同一个 awk
进程中运行。然后您的脚本将比当前的逐行 while
循环快得多。
关于linux - 将读取行转换为 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268786/