ふと、コンソール上で指定した値に近い順で数字をsortしたい場合、どうすればいいかなーと思ったので調べてみた。 指定した値との差分さえ絶対値にすればいいので、そんなに難しい話ではない。とりあえずawkを使ってみる前提(perlとかだとabs関数あるようなので)。で、awkにはabsの関数が無いのだけど、以下のようにすることで絶対値を取得してsortさせることができる。

awk '{x=-$0;print $0,(x < 0) ? -x : x}' | sort -k2n | cut -d' ' -f1
blacknon@BS-PUB-UBUNTU-01:~$ # 5に近い値順...

ちょっと前に、Twitter上でシェル芸を使って漢数字ソートをするという内容があったので、備忘として残しておく。 そもそも、普通に漢数字をソートした場合はUnicodeのハッシュでソートされるのだが、その順番はバラバラになってしまう。

blacknon@BS-PUB-DEVELOP:~$ echo "一二三四五六七八九〇" | grep -o . | sort
〇
一
九
五
三
四
七
二
八
六

これは、文字コード策定の際に画数の少ない順で振られているとか、色々と事情があるようだ。 まぁ確かに、「one,two,three...」と記述してsortしても順番どおりには並ばないし...


ちょっとしたcsvファイルをソートする際、ヘッダーである1行目はそのままに中身だけソートする必要があったので、ちょっと調べてみた。 で、以下のようにすることで1行目の位置はそのままにソートが可能なので、備忘として残しておく。

awk 'NR==1;NR>1{print $0|"sort"}'
awk 'NR==1;NR>1{print $0|"sort -1krn"}' # 例1) 1列目で数字の降順
awk 'NR==1;NR>1{print $0|"shuf"}'       # 例2) ヘッダー以外の行でシャッフル

Linuxコンソール上で、ソートせずにユニークな値を取得したい時がある。
例えば、以下のようなファイルからユニークな値を取得する際、よく使われる方法としてはsort+uniqコマンドの組み合わせなのだが、それだと順番がずれてしまう。
あくまでもその文字列が最初に登場した順番でユニークな値を取得したいとする。

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
test:0
test:2
test:6
test:9
test:4
test:9
test:9
test:9
test:4
test:0
test:2
test:8
test:0
test:7...

sortコマンドで覚えておきたい使い方9個(+3個)

Linux/UNIXでよく使用される、出力される内容を並び替えするsortコマンド。
今回は、このsortコマンドで覚えておきたい使い方についてを紹介する。

1.基本的な使い方

基本的には、以下のようにコマンドを実行することでその出力内容を並び替える事が出来る。

[root@test-centos7 ~]# cat /work/test5.txt
5 eeeee
1 aaaaa
4 ddddd
2 bbbbb
6 fffff
3 ccccc
[root@test-centos7 ~]# cat /work/test5.txt | sort
1 aaaaa
2 bbbbb
3...

Linux/UNIXのsortコマンドでIPアドレスのソートを行う

2017/02/12 追記

以下の内容を記述していた時は知らなかったのだが、GNU sortを使っているのであれば普通に「-V(--version-sort)」で処理するほうがいい。
(Mac OS Xだとgsortが必要)

sort -V
blacknon@BS-PUB-DEVELOP:~$ cat test.txt
192.168.0.102
192.168.0.8
192.168.0.97
192.168.0.68
192.168.0.99
192.168.0.66
192.168.0.24
blacknon@BS-PUB-DEVELOP:~$ sort -V test.t...