Linuxコンソール上で行の要素をソートさせる
Pocket

以下のようなファイルがあったとして、それを行ごとでソートするにはどうすればよいのだろう?とふと思ったので、調べてみた。

●cat /tmp/test2.txt

3 154 2 7 331 4 325
1 14 23 79 2 94 153
Sponsored Links

結論としては、whileで行ごとに一度sortコマンドでソートが行えるようにしてソートさせればよい。

cat 対象ファイル | while read line; do echo $line | sed 's/ /\n/g' | sort -n | awk '{line=line " " $0} END {print line}' ; done
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test2.txt
3 154 2 7 331 4 325
1 14 23 79 2 94 153
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test2.txt | while read line; do echo $line | sed 's/ /\n/g' | sort -n | awk '{line=line " " $0} END {print line}' ; done
 2 3 4 7 154 325 331
 1 2 14 23 79 94 153

 

2016/08/28 追記

もしくは、第24回シェル芸勉強会 Q7の解法のようにawkでasortを用いるという方法もあるようだ。

awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]" "}print ""}'
[root@BS-PUB-CENT7-01 vol.24]# echo b a d c 2 3 1 |  awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]" "}print ""}'
a b c d 1 2 3

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。