如何在awk中为每个循环执行一个命令?

我使用awk来分割一个二进制流,我可以像这样将每个部分都变成一个for循环。

for(i=1;i<=NF;i++)

我不想将每个字段转换为文本或参数,而只是直接将其传递给一个命令。

我试图找到像这样的东西,

for(i=1;i<=NF;i++) system("decode")

但是这显然不起作用。 解码不接收输入。

我如何获得解码以接收循环中的每个字段?


这不适合你吗?

for(i=1;i<=NF;i++) print $i | "decode"
close("decode")

它将每个字段(或您的案例中的字节)发送到连接到“解码”程序的管道。

之后,关闭“解码”管道以强制刷新管道上的所有数据。

您可以在https://www.gnu.org/software/gawk/manual/html_node/Redirection.html上阅读有关gawk重定向的更多信息。

如果你想为每个单字节执行“解码”,只需在每次迭代中关闭管道:

for(i=1;i<=NF;i++) {
    print $i | "decode"
    close("decode")
}

这是你想要做的吗?

awk '{for(i=1; i<=NF; i++) system("decode "$i)}' input_file.txt

这应该将包含在awk变量$i每个字段传递给decode外部程序。 注意变量在"decode "的引号之外,否则它将被shell而不是awk解释。

链接地址: http://www.djcxy.com/p/97087.html

上一篇: How to execute a command for each loop in awk?

下一篇: Dynamically create autoload command from filenames in Ruby