シェルでCSVファイルの特定のフィールドの数値で並べ替える方法

こんにちは、さるまりんです。

以前sortコマンドで「ひらがな」で並べてみるというのをやりました。
今回は数値でデータを並べてみます。

こんなファイルがあります。

fruits.csv

3,Apples
7,Bananas
5,Oranges
2,Grapes
10,Pears
1,Watermelon
4,Mangoes
9,Strawberries
6,Pineapples
8,Peaches

このデータをソートしたい。

単純にsortコマンドでやってみます。

$ sort fruits.csv
1,Watermelon
10,Pears
2,Grapes
3,Apples
4,Mangoes
5,Oranges
6,Pineapples
7,Bananas
8,Peaches
9,Strawberries

惜しい!
1の次は10ではなくて、2になってほしい、そして9の後に10が来てほしいですよね。

それをするにはこうします。

sort -t',' -k1,1n [入力ファイル]

やってみます。

$ sort -t',' -k1,1n fruits.csv
1,Watermelon
2,Grapes
3,Apples
4,Mangoes
5,Oranges
6,Pineapples
7,Bananas
8,Peaches
9,Strawberries
10,Pears

ちゃんと並んでくれました。

sortコマンドの-t','で区切り文字をカンマに指定、-k1,1nで1番目のフィールドを数値順(n)で並べるとオプションで指定しています。

コマンドってパワフルですよね。
作ってきてくれた方に感謝してプログラムを書きたいと思います。

読んでくださってありがとうございました。

それではまた!