【カラム指定・複数キー】これだけ覚えれば使えるsortコマンドの使い方

Linux
スポンサーリンク

はじめに

sortコマンドでただ適当に使うとうまくソートしてくれないことも多いですよね。紹介する内容だけ覚えておけば大抵の場合は対応できます。カラム指定や複数キー指定する方法を知っていれば余裕で現場で使えるはずです。

sortコマンドとは

ファイルやコマンドの標準出力の文字列をソートすることができるLinux等で使えるコマンドです。

基本構文

・書式

$ sort -t '区切り文字' -k ソートするカラム指定 対象ファイル

・例(/etc/paswdファイルに対し、区切り文字 : で3番目のカラムを数値として並べ替える。)

$ sort -t ':' -k 3,3n /etc/passwd

解説

-t オプション

-t ‘区切り文字’ で対象ファイルのフィールドを分ける区切り文字を指定します。

例えば、カンマ区切りのCSVファイルが対象ならば -t ‘,’ とします。

-k オプション

-k ソートするカラム指定 で並べ替えを行う対象のカラムと並べ替え方を指定します。

ソートするカラム指定が重要になります。以下で解説します。

ソートするカラム指定と並べ替え方のオプション

ソートするカラム指定 

n番目のカラムでソートしたいなら、-k n,n とします。

例えば、3番目のカラムでソートするなら、-k 3,3 です。

3番目と4番目のカラムでソートするという場合に、-k 3,4 みたいな使い方があるのですが、わかりにくくなるので別に覚えなくても大丈夫です。

並べ替え方のオプション

上記のカラム指定にくっつける形で並べ替えのオプションを設定できます。覚えるべきは以下の二つのみです。

n数値としてソートする
r逆順でソートする

n で数値として並べ替えを行います。3番目のカラムを数値として並べ替えるなら、-k 3,3n です。

r で逆順に並べ替えできます。3番目のカラムを逆順に並べ替えるなら、-k 3,3r です。

-k 3,3rn のように両方合わせることもできます。

複数のキーでのソート

-k オプションを以下のように複数回使うことで複数のキーでのソートもできます。

$ sort -t ',' -k 1,1n -k 3,3r test1.csv

例えば以下のような中身のtest1.csvというファイルがあるとします。

id,date,str
100,2020-10-30,AAA
50,2023-12-20,CCC
50,2020-10-20,AAA
50,2015-04-20,DDD
30,2019-10-19,BBB
999,2014-10-30,DDD

上記のsortコマンドを実行すると、idカラムが数値順でソートされ、その中で複数あるid =50の行で、strカラムが文字として逆順でソートされます。

id,date,str
30,2019-10-19,BBB
50,2015-04-20,DDD
50,2023-12-20,CCC
50,2020-10-20,AAA
100,2020-10-30,AAA
999,2014-10-30,DDD

実用例

並び順がぐちゃぐちゃなファイルがあってそれらの比較をしたいという場合は、sortした結果をdiffでコマンド実行結果を直接比較する方法を使うと便利です。

$ diff -s test1.csv test2.csv
1d0
< id,date,str
3,5d1
< 50,2023-12-20,CCC
< 50,2020-10-20,AAA
< 50,2015-04-20,DDD
6a3
> 50,2023-12-20,CCC
7a5,7
> id,date,str
> 50,2015-04-20,DDD
> 50,2020-10-20,AAA
$ diff -s <(sort -t ',' -k 1,1n test1.csv) <(sort -t ',' -k 1,1n test2.csv)
Files /dev/fd/63 and /dev/fd/62 are identical

diffで使っている -s オプションは比較してファイルが同じだったら「同じだよ」とメッセージを出力してくれるオプションです。

Linuxをもっと使えるようになるには

実践あるのみ!ですが、一度体系的にLinuxを学習するとより深く理解することができますし、いろいろなコマンドを知っていると応用が効くようになります。

以下の書籍がおすすめです。

コメント

タイトルとURLをコピーしました