読者です 読者をやめる 読者になる 読者になる

Awesome Hacks!

プログラミング初心者なので地道に勉強していきます。分からない人の立場から整理していきます。

sortコマンド

シェルスクリプト

sortコマンドは思ったより高機能だった。

各行を"文字列"として"昇順に"ソート
$ cat testFile.txt | sort
1000,a,1000,30
20,b,500,1000
300,c,700,200
$


各行を"数値"として"昇順に"ソート

※動作未確認

$ cat testFile.txt | sort -n
300,c,700,200
1000,a,1000,30
20,b,500,1000
$ cat testFile.txt | sort -n
20,b,500,1000
300,c,700,200
1000,a,1000,30
$


各行を"文字列"として"降順に"ソート
$ cat testFile.txt
c,700,200
a,1000,30
b,500,1000
$ cat testFile.txt | sort -r
c,700,200
b,500,1000
a,1000,30
$


昇順にソートして、同じものをまとめる
$ cat testFile.txt
b,500,1000
a,1000,30
c,700,200
b,500,1000
a,200,30
c,700,200
$ cat testFile.txt | sort -u
a,1000,30
a,200,30
b,500,1000
c,700,200
$


指定した文字で区切ってフィールド分けして、指定したキーでソート

例)「,」区切りにして、3番目のフィールドを(文字列の)キーとして"昇順に"ソートする場合

$ cat testFile.txt
b,500,1000
a,1000,30
c,700,200
$ cat testFile.txt | sort -t, -k 3
b,500,1000
c,700,200
a,1000,30
$ 

※文字列なので、「200」より先に「1000」が来る(1文字目で優先される)

指定した文字で区切ってフィールド分けして、指定したキーでソート

例)「,」区切りにして、3番目のフィールドを(文字列の)キーとして"降順に"ソートする場合

$ cat testFile.txt | sort -t, -k 3r
a,1000,30
c,700,200
b,500,1000
$ 


指定した文字で区切ってフィールド分けして、指定したキーでソート

例)「,」区切りにして、3番目のフィールドを(数値の)キーとしてソートする場合

$ cat testFile.txt | sort -t, -k 3n
a,1000,30
c,700,200
b,500,1000
$


指定したキーでソートしつつ、そのキーでまとめる

ソートしてからまとめるのではなく、以下のように先に3番目のキーが同じものの中で1番最初に出てきた行だけにまとめた後に、指定したキーでソートしている

$ cat testFile.txt
b,600,1000
a,1000,30
c,700,200
b,500,1000
a,200,30
c,700,200
$ cat testFile.txt | sort -t, -k 3 -u
b,600,1000
c,700,200
a,1000,30
$