次の内容を含むテキストファイルがあります。
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