それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

文字列の長さ順にソートする(awk/sortコマンド組み合わせ)

文字列の長さ順にソートすると美しい。

なんでなんだろうね。アルファベット順よりも文字列長さ順でソートすると、出力がきれいに見えるんだよね。

awk/sort で文字列の長さ順にソートする。

command | awk '{print length() ,$0}' | sort -nr

例えばPATHをソートしてみる

takuya@~$ echo -e ${PATH//:/'\n'}  |  awk '{print length() ,$0}' | sort -nr
26 /Users/takuya/.rbenv/shims
26 /Users/takuya/.pyenv/shims
24 /usr/local/share/npm/bin
24 /Users/takuya/.pyenv/bin
18 /Users/takuya/.bin
15 /usr/local/sbin
14 /usr/local/bin
12 /opt/X11/bin
9 /usr/sbin
8 /usr/bin
5 /sbin
4 /bin

ああ、美しい。

ソートした結果が欲しい時

takuya@~$ echo -e ${PATH//:/'\n'}  |  awk '{print length() ,$0}' | sort -nr | awk '{ print  $2 }'
/Users/takuya/.rbenv/shims
/Users/takuya/.pyenv/shims
/usr/local/share/npm/bin
/Users/takuya/.pyenv/bin
/Users/takuya/.bin
/usr/local/sbin
/usr/local/bin
/opt/X11/bin
/usr/sbin
/usr/bin
/sbin
/bin

うん、美しい。

とくにPATHは文字列が長いほど、優先度が高く、/binなどの共有コマンドを上書きする側になるので、コレが便利。