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

时间:2017-08-19 16:49:39

标签: awk binary-data

我使用awk分割二进制流,我可以将每个部分都放到这样的for循环中。

accountLabel.setContentHuggingPriority(249, for: .vertical)

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

我试图找到类似的东西,

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

但这显然不起作用。解码没有输入。

如何进行解码以接收循环中的每个字段?

2 个答案:

答案 0 :(得分:3)

这不适合你吗?

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

它将每个字段(或您的情况下的字节)发送到连接到“decode”程序的管道。

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

您可以在https://www.gnu.org/software/gawk/manual/html_node/Redirection.html

上阅读有关gawk重定向的更多信息

如果要对每个字节执行“decode”,只需在每次迭代中关闭管道:

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

答案 1 :(得分:1)

这是你想要做的吗?

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

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