他の列値に基づいて列を行形式に変換する必要がある

他の列値に基づいて列を行形式に変換する必要がある

次の内容を含むテキストファイルがあります。

ABC 1
XYZ 1
QWE 1
GRE 1
脱硫装置2
ドイツNo. 2
出力2
RTY 3
興味のある場所3
モバイルNB 3
LKJ 3

予想出力:

ABC XYZ QWE GRE
DGDギア出力
RTY POI MNB LKJ

つまり、2番目の列の値が等しいすべての単語をスペースで区切って同じ行に表示する必要があります。

ベストアンサー1

awk を使用し、すべての入力をメモリに読み込むことなく、入力に現れる順序で出力レコードを印刷します。

$ awk '
    $2 != prev { if (NR>1) print rec; rec=$1; prev=$2; next }
    { rec = rec OFS $1 }
    END { print rec }
' file
ABC XYZ QWE GRE
DGD GER OUT
RTY POI MNB LKJ

上記では、入力例に示すように、入力が2番目のフィールド値にグループ化されていると仮定します。そうでない場合は、まずソートしてください。sort -k2,2 file | awk 'script'

上記は、各 $2 が入力に現れるときに $2 の $1 セットをメモリに保存します。そうしたくない場合は、$1 が発生したとおりに印刷できます。

$ awk '
    $2 != prev { if (NR>1) print ""; printf "%s", $1; prev=$2; next }
    { printf "%s%s", OFS, $1 }
    END { print "" }
' file
ABC XYZ QWE GRE
DGD GER OUT
RTY POI MNB LKJ

おすすめ記事