因此,我有一个 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
信)。