Linux - CSV データのソート!
Updated:
Linux で CSV データをソートする方法についての記録です。
0. 前提条件
- LMDE 3 (Linux Mint Debian Edition 3; 64bit) での作業を想定。(他の Linux ディストリビューションでも同様のはず)
1. CSV ファイルの準備
ソートに使用する CSV データ(ファイル)は、以下のような内容とする。
(この例では、データは全て2019年6月22日分。但し、文字列としてソートされているため、時・分・秒・ナノ秒の並びが気に入らない)
File: test.csv
年,月,日,時,分,秒,秒以下[ナノ秒],緯度,経度
2019,6,22,0,0,52,742255119,36.2951,133.5592
2019,6,22,0,1,10,360919063,35.9735,133.1688
2019,6,22,0,1,33,131445817,36.2947,133.5410
2019,6,22,0,1,33,131621079,36.3374,133.5314
2019,6,22,0,1,33,131730443,36.2996,133.3779
2019,6,22,0,1,33,304507343,36.3103,133.5052
2019,6,22,0,10,3,442331076,36.3377,133.6185
2019,6,22,0,10,3,444310399,36.3687,133.6207
2019,6,22,0,10,42,594407302,36.0316,133.3392
2019,6,22,0,11,10,905628211,36.0301,133.3683
:
===< 中略 >===
:
2019,6,22,0,19,33,509865021,36.0341,133.4350
2019,6,22,0,19,33,568154738,36.0283,133.4362
2019,6,22,0,19,33,659982903,36.0282,133.4363
2019,6,22,0,19,48,332025744,36.0642,133.4004
2019,6,22,0,2,19,140519626,36.0323,133.3255
2019,6,22,0,2,19,185271431,35.9970,133.3679
2019,6,22,0,2,19,186265484,36.0245,133.3413
2019,6,22,0,2,19,387917907,36.0011,133.3676
:
===< 後略 >===
:
2. 使用例
4〜7列目(時〜ナノ秒)を数値とみなしてソートする例。
$ sort -t "," -k 4,4n -k 5,5n -k 6,6n -k 7,7n test.csv > test_sorted.csv
-t
は区切り文字を指定するオプション。-t
は--field-separator=
としてもよい
-k
はソートする列番号指定するオプション。-k 4,4n
で、4列目から4列目を数値とみなしてソート。-k 4n
だと、4列目から最終列を(数値以外の文字列を除外して)数値とみなしてソートしてしまうので、注意。-k 4,6n
だと、4列目から6列目をまとめて(数値以外の文字列を除外して)数値とみなしてソートしてしまうので、注意。-k
は--key=
としてもよい。
- ヘッダ行に数値があると、それもソートされてしまうので、注意。
その他、よく使用するであろうオプション。
-f
,--ignore-case
は大/小文字を区別せずにソートするオプション。-r
,--reverse
は逆順にソートするオプション。
3. 結果確認
ソート後のデータ(ファイル)を確認してみる。
File: test_sorted.csv
年,月,日,時,分,秒,秒以下[ナノ秒],緯度,経度
2019,6,22,0,0,52,742255119,36.2951,133.5592
2019,6,22,0,1,10,360919063,35.9735,133.1688
2019,6,22,0,1,33,131445817,36.2947,133.5410
2019,6,22,0,1,33,131621079,36.3374,133.5314
2019,6,22,0,1,33,131730443,36.2996,133.3779
2019,6,22,0,1,33,304507343,36.3103,133.5052
2019,6,22,0,2,19,140519626,36.0323,133.3255
2019,6,22,0,2,19,185271431,35.9970,133.3679
2019,6,22,0,2,19,186265484,36.0245,133.3413
2019,6,22,0,2,19,387917907,36.0011,133.3676
2019,6,22,0,2,19,387986811,36.1129,133.3816
:
===< 中略 >===
:
2019,6,22,0,4,44,407918890,36.0343,133.3725
2019,6,22,0,4,44,443029891,36.0693,133.3188
2019,6,22,0,5,3,143444634,36.0098,133.3240
2019,6,22,0,5,3,322006074,36.0639,133.2525
2019,6,22,0,5,3,324683247,36.0015,133.3228
2019,6,22,0,5,3,460229408,36.0043,133.3213
2019,6,22,0,5,10,284162493,36.0294,133.3776
2019,6,22,0,5,38,277787048,36.0473,133.3498
2019,6,22,0,5,43,920394309,36.0045,133.3220
2019,6,22,0,5,44,424041228,36.3349,133.7917
2019,6,22,0,5,44,424241997,36.3067,133.8020
2019,6,22,0,5,44,478318073,36.3102,133.7579
2019,6,22,0,6,9,476985152,36.2383,133.1780
2019,6,22,0,6,41,49010239,36.0469,133.3620
:
===< 後略 >===
:
4. その他
詳細は sort --help
か man sort
で確認可能。
何かと応用できるでしょう。
以上。
Comments