パイプラインからのgrep出力を行形式から列形式に変換する

パイプラインからのgrep出力を行形式から列形式に変換する

分析を実行するために「dsk」というプログラムを使用しています。私はほんの数行の分析に興味があり、以下を使用してその行を検索します。

dsk -file <filename> | grep -Ei 'string1|string2|string3'

これは私に次のようなものを与えます:

string1                                : 13
string2                                : 46
string3                                : 39

*編集:より現実的な出力のためにフォーマットが変更されました(タブ制限なし、32個のスペース、コロン、フィールド間の別のスペース)。

しかし、私は出力が次のようになりたいと思います。

string1 string2 string3
13      46      39

Glennが提供した答えは、次の結果を生成します。おそらく空白が混乱を引き起こすからです。

string1 string2 string3
:   :   :

ベストアンサー1

使用変える

dsk -file "$file" | awk '
    tolower($1) ~ /string1|string2|string3/ { n++; vars[n] = $1; vals[n] = $2 }
    END {
        for (i = 1; i <= n; i++) printf "%s\t", vars[i]
        print ""
        for (i = 1; i <= n; i++) printf "%s\t", vals[i]
        print ""
    }
'

おすすめ記事