如何在 awk 脚本中存储和排列命令的输出?

如何在 awk 脚本中存储和排列命令的输出?

因此,我有一个 awk 脚本,用于计算字符减去第一个字段的出现次数,并且我想将命令的输出存储在所有排列的变量中。然而,下面的方法似乎不起作用。

#!/bin/awk -f
{
var=$($1="";print gsub("o",""))
echo $var
}

输入:

Hello how are you?
Orange obliviate

输出:

3
2

期望的输出:

3 2

谢谢你!

答案1

您可以通过将数字存储在您在END块中输出的数组中来完成此操作:

{
    $1 = ""
    count[++n] = gsub("o", "")
}

END {
    $0 = ""                   # empty the current record
    for (i = 1; i <= n; ++i)
        $i = count[i]         # create new fields for output

    # output the current record (created above)
    print
}

或者,您可以在计算时输出数字,如果需要,可以用字段分隔符分隔,然后完成END块中的行:

{
    $1 = ""

    # Print the number, preceded by OFS if this is not the first line.
    # Does not output a newline (ORS).
    printf "%s%s", (NR > 1 ? OFS : ""), gsub("o", "")
}

END {
    # Finish the output (ORS is a newline by default).
    printf "%s", ORS
}

这两种变体都允许用户在命令行上设置适合他们的值,OFS例如ORS

$ awk -v OFS=',' -f script.awk file
2,1
$ awk -v OFS='\t' -f script.awk file
2       1
$ awk -v OFS='-->' -v ORS='.\n' -f script.awk file
2-->1.

注意:我假设问题中显示的输出是错误的,因为这是您在不是忽略第一个字段(并忽略o )。

相关内容