linux - 将读取行转换为 awk

标签 linux bash awk while-loop

当您处理大文件时,读取行非常慢。我从谷歌找到的一般建议是使用 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")

也就是说,不是逐行附加到 htmlawk 应该生成整个内容。在单个 awk 进程中,您可以进行非常强大的文本处理,这将比多个 echotr 等更有效例如在 shell 中。

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

关于linux - 将读取行转换为 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268786/

相关文章:

c++ - 从 linux 命令行用另一个替换整个段落

html - 将 Shell 脚本变量输出为 HTML

bash - env 命令不列出 SHELL 环境变量

linux - 使用 grep 提取匹配后的第一个单词

linux - 如何创建没有不必要空格的 CSV 文件

python - 除了 Udp6SocketTransport Pysnmp 之外还有其他替代方案吗

linux - 是否可以关闭 linux 内核并在实模式下恢复?

linux - Linux下的gcc可执行文件在哪里?

javascript - Bash 和 mongodb 脚本评估变量

http - gawk 在没有超时的情况下通过管道读取最后一位二进制数据?