そのため、最初のフィールドを引いた文字の発生回数を計算する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
手紙)。