sortコマンドの使い方【Linux】

IT技術

このページには広告が含まれる場合があります。

sortコマンドはよく使うコマンドですね。今回はsortコマンドのオプション等を解説します。

検証OS:Amazon Linux 2

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

sortコマンドのバージョン

$ sort --version
sort (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

sortコマンドはこんな時に使える!

  • Linux上のファイルをソート出来る
  • 例えばローカル環境にある大容量のCSVファイル等があった時に、100万行以上あるからExcelじゃ出来ない、とかExcel重いからPCのリソース(CPU、メモリ、DISKIO等)を使わずに裏でソートさせておくことが出来る
  • uniqコマンドとセットで重複を排除できる
  • head/tailコマンドとセットで上位100件等を取得できる

等、色々と使い道があります。様々な場面でソートというのは必要になります。こういう細かい作業をササっと消化できるようになりましょう。今までの経験で得た知識を組み合わせて自分の技術にしましょう。

オプション一覧

オプションロングオプション説明(manより)
-b–ignore-leading-blanks先頭の空白を無視する
-d–dictionary-order空白および英数字のみ含まれていると仮定する
-f–ignore-case大文字・小文字を区別しない
-g–general-numeric-sort一般的な数値として比較を行う
-i–ignore-nonprinting表示可能な文字のみ比較を行う
-M–month-sort月名でソートする。(不明) < ‘JAN’ < … < ‘DEC’ の順
-h–human-numeric-sort人間が読むことができる形式の数値を比較する (例: 2K 1G)
-n–numeric-sort文字列を数値とみなして比較する
-R–random-sortキーのランダムハッシュ順にソートする
-r–reverse逆順にソートを行う
-V–version-sort自然な (バージョン) 数字順でソートする
-c–check, –check=diagnose-first入力がソートされているかを確認する。ソート は行わない
-C–check=quiet, –check=silent-c と同様だが、正しくソートされていない最初の行を出力しない
-k–key=KEYDEF指定されたキーでソートする。KEYDEF では場所と並び替え種別を指定する
-m–mergeソートされたファイルを併合する。ソート自体は行わない
-o–output=FILE結果を標準出力の代わりに FILE に書き込む
-s–stable前の比較結果に頼らない安定的な並び替えを行う
-S–buffer-size=SIZE主記憶のバッファの大きさとして SIZE を使用する
-t–field-separator=SEPフィールド区切り文字として空白の代わりに SEP を使用する
-T–temporary-directory=DIR一時ディレクトリとして $TMPDIR または /tmp ではなく DIR を使用する。オプションを複数指定すると、複数のディレクトリを指定できる
-u–unique-c と併せて使用した場合、厳密に順序を確認する。-c を付けずに使用した場合、最初の同一行のみ出力する
-z–zero-terminated文字列の最後に改行でなく NULL 文字を付加する

使用例

ls -l結果をサイズ順に並べ替える(-kオプション、-nオプション、-rオプション)

※lsコマンドのオプションでも出来ますが例として。

・ls -lの結果

# ls -l
合計 16
-rw-r--r-- 1 root root 4 11月 10 04:40 aaaaa.dat
-rw-r--r-- 1 root root 63 11月 10 04:41 bbbbb.dat
-rw-r--r-- 1 root root 9 11月 10 04:41 ccccc.dat
-rw-r--r-- 1 root root 150 11月 10 04:42 ddddd.dat

・サイズ順(昇順)

-kで4カラム目を指定して、-nで数値比較して並べ替えています。(-kオプションの4,4は後で説明します)

# ls -l | sort -k 4,4n
-rw-r--r-- 1 root root 4 11月 10 04:40 aaaaa.dat
-rw-r--r-- 1 root root 9 11月 10 04:41 ccccc.dat
-rw-r--r-- 1 root root 63 11月 10 04:41 bbbbb.dat
-rw-r--r-- 1 root root 150 11月 10 04:42 ddddd.dat

・サイズ順(降順)

-rオプションで降順にしています。

# ls -l | sort -k 4,4nr
合計 16
-rw-r--r-- 1 root root 150 11月 10 04:42 ddddd.dat
-rw-r--r-- 1 root root 63 11月 10 04:41 bbbbb.dat
-rw-r--r-- 1 root root 9 11月 10 04:41 ccccc.dat
-rw-r--r-- 1 root root 4 11月 10 04:40 aaaaa.dat

csvファイルを並べ変える

・並べ変える元ファイル(業務でこんなぐちゃぐちゃになっていることはないと思いますが。。)

※商品名,単価,数量,合計金額,日付といった例です。
# cat eeeee.csv
BBBB,152,107,16264,2021/11/19
EEEEEE,809,55,44495,2021/11/11
AAA,523,43,22489,2021/11/17
BBBB,152,47,7144,2021/11/13
AAA,523,68,35564,2021/11/13
AAA,523,24,12552,2021/11/10
BBBB,152,96,14592,2021/11/10
BBBB,152,105,15960,2021/11/19
BBBB,152,86,13072,2021/11/15

・売れた数(3カラム目)順に並べ替えよう

-tオプションでセパレータにカンマを指定して、-kオプションで3カラム目で数値のnを入れて降順のrを入れてとすると

# sort -k 3n -t , eeeee.csv
BBBB,152,107,16264,2021/11/19
BBBB,152,105,15960,2021/11/19
BBBB,152,96,14592,2021/11/10
BBBB,152,86,13072,2021/11/15
AAA,523,68,35564,2021/11/13
EEEEEE,809,55,44495,2021/11/11
AAA,523,43,22489,2021/11/17
AAA,523,24,12552,2021/11/10
BBBB,152,47,7144,2021/11/13

並び変わっていない!!24の下に47が!これ、結構はまる落とし穴です。-kオプションは -k m,n と指定します。nの指定がない場合は最終カラムまで指定されたもの、と認識されます。この例では、3~5カラム目迄を1つの数値として並べ替えたことになります。正しくはこのように指定します。

# sort -k 3,3nr -t , eeeee.csv
BBBB,152,107,16264,2021/11/19
BBBB,152,105,15960,2021/11/19
BBBB,152,96,14592,2021/11/10
BBBB,152,86,13072,2021/11/15
AAA,523,68,35564,2021/11/13
EEEEEE,809,55,44495,2021/11/11
BBBB,152,47,7144,2021/11/13
AAA,523,43,22489,2021/11/17
AAA,523,24,12552,2021/11/10

複数キーで並べ替える

先ほどのcsvファイルを例に、商品名で並べ替えた後に合計金額降順とするとこのようになります。

# sort -k 1,1 -k 4,4nr -t , eeeee.csv
AAA,523,68,35564,2021/11/13
AAA,523,43,22489,2021/11/17
AAA,523,24,12552,2021/11/10
BBBB,152,107,16264,2021/11/19
BBBB,152,105,15960,2021/11/19
BBBB,152,96,14592,2021/11/10
BBBB,152,86,13072,2021/11/15
BBBB,152,47,7144,2021/11/13
EEEEEE,809,55,44495,2021/11/11

簡単ですね。

sortの注意事項

sortはリソース食う

ソートというのは基本的に重い処理と思ってください。大容量ファイルをソートするときなどは、CPU、メモリ、ディスク等に注意して実施してくださいね。(ソートのアルゴリズムを理解するといいと思います。)

(基本ですが)-kオプションにはまらないように

私がなんでソート出来ないんだーとはまったことあるので、注意事項として。

ぼっち経営者

ぼっち経営者

IT企業経営者×インフラエンジニア×2児の父親。 経営者として:現在3期目。エンジニアの傍らでバックオフィス業務もすべてにひとりで実施。ここからぼっち経営者という名前をつけました。 エンジニアとして:15年程の経験があり、直近はインフラクラウド(AWS)中心で活動 父親として:2児の娘を持つ父親として、日々子育てに奮闘中。

関連記事

特集記事

ぼっち経営者

ぼっち経営者

IT企業経営者×インフラエンジニア×2児の父親。 現在3期目の会社を経営中。エンジニアの傍らでバックオフィス業務もすべてに私ひとりで実施。ここからぼっち経営者という名前を。 エンジニアとしては15年程の経験。直近はクラウド(AWS)中心で活動。 2児の娘を持つ父親として、日々子育てに奮闘中。

新着記事

  1. Google WorkspaceをIdPにしてAWSマネジメントコンソールへログイン(画像付き)

  2. 大容量ファイルを作成する方法(fsutilコマンド,ddコマンド)

  3. HULFT集信後ジョブ失敗時の動き(備忘)

  4. RHELナレッジベースへのアクセス方法【AWS EC2】

  5. rpmdbが壊れた場合のリカバリ方法

ランキング

  1. 1

    【初心者向け】AWS EC2のバックアップ・リストア手順!必ず一度は実施して理解しておこう!

  2. 2

    RDSのメンテナンスとは何ですか?対応方法は?

  3. 3

    【Tips】WinSCPをバッチで実行する

  4. 4

    DQ6のカジノの確率調査してみた

  5. 5

    SES営業初心者向け!SESにおける毎月の営業事務業務について

TOP