私はawkプログラミングの初心者です。次のように説明したいと思います。
私は持っています:
month D1 D2 D3
01 25 26 23
01 13 12 11
01 48 45 12
02 77 87 45
02 63 99 12
私が欲しい:
month D1 D2 D3
January 25 26 23
13 12 11
48 45 12
February 77 87 45
63 99 12
ベストアンサー1
zsh
(ユーザーロケールの月名リストを取得する)+を使用してくださいawk
。おそらく次のようになります。
zmodload zsh/langinfo
awk -v months=${(vj[:])langinfo[(I)MON_<1-12>]} '
BEGIN{split(months, month, ":")}
NR > 1 {
this_month = month[0+$1]
if (this_month == last)
$1 = blanks
else
blanks = sprintf("%*s", length(last = $1 = this_month), "")
}
{print}' < your-file
月名に複数バイトでエンコードされた文字を含むロケール(たとえば、février
2バイトでエンコードされたロケール)では、fr_FR.UTF-8
マルチバイトをサポートしない実装ではソートがオフになるé
可能性があります。awk
mawk
たとえば、次のような結果が得られます。
month D1 D2 D3
janvier 25 26 23
13 12 11
48 45 12
février 77 87 45
63 99 12
とgawk
、しかし
month D1 D2 D3
janvier 25 26 23
13 12 11
48 45 12
février 77 87 45
63 99 12
そしてmawk
。
ユーザーのロケールに関係なく、月名を英語で表示したい場合に設定できますLC_ALL=C
。