sortコマンドの練習

以下のファイルfileがある。

bbb@example.jp
trueff@mail.goo.ne.jp
aaa@example.com
aaa@example.jp
aaa.bbb@example.jp
ambiesoft.trueff@google.com
ccc@example.com

これをドメイン別にソートし、その後名前順にソートしたい。

普通にsortコマンド使うと以下の用になる。
$ sort file
aaa.bbb@example.jp
aaa@example.com
aaa@example.jp
ambiesoft.trueff@google.com
bbb@example.jp
ccc@example.com
trueff@mail.goo.ne.jp

当然ドメイン別になってくれない。

sortのマニュアルを読むと-t でセパレータを指定でき、-kでどのフィールドでソートするかを指定できる。そこで以下のようにやってみた。

$ sort -t @ -k 2 file
aaa@example.com
ccc@example.com
aaa.bbb@example.jp
aaa@example.jp
bbb@example.jp
ambiesoft.trueff@google.com
trueff@mail.goo.ne.jp

上記コマンドの-k 2は2番目から最後までのフィールドでソートする意味。よってドメインでソートされる。しかしドメイン順になったが、aaa.bbb@example.jpの方がaaa@example.jpより先に来ている。よって以下の様にやってみた。

$ sort -t @ -k 2 -k 1,1 file
aaa@example.com
ccc@example.com
aaa@example.jp
aaa.bbb@example.jp
bbb@example.jp
ambiesoft.trueff@google.com
trueff@mail.goo.ne.jp

-k 1,1は最初のフィールドだけを見てソートするの意味。-k 1だと最初から最後までを見てソートする意味になってしまう。

終わり。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)