在阅读行时转换为awk



而处理大文件时,读取行非常慢。我从谷歌找到的一般建议是使用 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个回声,一个tr,和stopList函数,我们甚至不知道它的作用。

要将其转换为awk您需要重新考虑一下,如下所示:

html[$dId]=$(awk '{ printf("n%s", $0) }' <<< "$list")

也就是说,awk应该生成整个事情,而不是逐行追加到html。在单个awk进程中,您可以进行非常强大的文本处理,这将比 shell 中的几个echotrs等更有效。

我的例子不包括stopList,因为你没有解释它的作用。无论它做什么,你都需要在awk中实现它,以便它可以在同一个awk进程中运行。然后你的脚本将比当前的逐行while循环快得多。

相关内容

  • 没有找到相关文章

最新更新