![如何在 awk 脚本中存储和排列命令的输出?](https://linux22.com/image/12960/%E5%A6%82%E4%BD%95%E5%9C%A8%20awk%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%AD%98%E5%82%A8%E5%92%8C%E6%8E%92%E5%88%97%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%EF%BC%9F.png)
因此,我有一个 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
信)。