やりたいこと
以下のようなファイルがあった場合に
$ cat test.txt いちに onetwo 12 一二
日本語の文字も1文字扱いで文字数順に並び替えたい。
環境情報
GNU bash, 4.4.12(1)-release (x86_64-pc-linux-gnu)
やり方
以下を実行すると
$ cat test.txt | while read line; do echo "$line" | wc -m;echo $line; done | awk 'NR%2 != 0{printf "%s ", $1} NR%2 == 0 {printf "%s\n",$1}' | sed -e s/" "/,/g | sort -r | cut -d"," -f2-
以下のように降順となる。(-r
オプションを外せば昇順)
onetwo いちに 一二 12
以下、補足です。
補足
awkでも文字数を取ることが可能ですが、マルチバイトである日本語の文字数が大きくなってしまうため
$ cat test.txt | awk '{print length, $0}' 9 いちに 6 onetwo 2 12 6 一二
以下記事と同様にwcコマンドを利用しています。
文字数と文字列が2行毎に表示されているので一行にまとめてsortをすれば冒頭で記載した要件を満たす処理が可能です。
以上。