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
}

どちらのバリエーションでも、ユーザーはコマンドラインから自分に適した値を設定できますOFSORS

$ 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 手紙)。

おすすめ記事