次のようなファイルがあります。
1 a
3 b
2 b
9 a
0 a
5 c
8 b
私は…したい...
- 列 2 に存在する各要素の最後のインスタンスのみを、列 1 に対応する値とともに出力します。
- 列 2 の内容に基づいて、1. の結果をアルファベット順に並べ替えます。
- 列 1 の前に出力に 3 番目の列を追加します。この内容は、列 2 の値によって異なります。
- タブを改行で置き換えます。
... 単一の awk プログラムでこれらすべてを実行します。
したがって、最終的な出力は次のようになります。
x
0
a
x
8
b
y
5
c
私はこれをすべて成功させましたが、2 つの awk プログラムと 1 つの外部コマンドを使用しました。
awk -F '\t' '{
value[$2]=$2"\t"$1 }
END { for (i in value) print value[i]
}' | \
sort -dfb | \
awk -F '\t' '{
if ($1 == "a" || $1=="b") print "x\n"$2"\n"$1
if ($1 == "c") print "y\n"$2"\n"$1
}'
これを行うより簡単な方法は、最初の awk プログラムの配列をアルファベット順にソートすることです。これにより、2 番目の awk プログラムの内容を最初の awk プログラムにマージできます。しかし、どうすればこれができるのかわかりません。何か案が ?