sort:文字列順・数値順で行を並べ替えたい
同じ入力「2・10・100・2」で、sort の文字列順、-n の数値順、-nr の降順を比較します。元ファイルを書き換えず、重複が残ることも確認できます。
コマンド例
printf '%s\n' 2 10 100 2 | LC_ALL=C sort -n同じ4行が、指定によってどう変わる?
上の例は練習用の値を直接渡すので、ファイルの準備は不要です。printf が1つの値を1行ずつ出し、| がその4行を sort に渡します。
| 入力 | 文字列順 sort | 数値の昇順 sort -n | 数値の降順 sort -nr |
|---|---|---|---|
| 2 | 10 | 2 | 100 |
| 10 | 100 | 2 | 10 |
| 100 | 2 | 10 | 2 |
| 2 | 2 | 100 | 2 |
文字列順では「1」で始まる10・100が「2」より先です。数値順の -n を付けると、数字の大きさで比較します。どの列も「2」が2行残ります。並べ替えだけでは重複を削除しません。
3種類をそのまま試す
# 文字列順
printf '%s\n' 2 10 100 2 | LC_ALL=C sort
# 数値の昇順(小さい順)
printf '%s\n' 2 10 100 2 | LC_ALL=C sort -n
# 数値の降順(大きい順)
printf '%s\n' 2 10 100 2 | LC_ALL=C sort -nr
いずれも結果を画面に表示するだけで、ファイルを作成・変更しません。LC_ALL=C は、このコマンドに限って文字や小数点などの比較条件をそろえます。日本語を読み仮名順にする指定ではありません。
既存ファイルを使うとき
LC_ALL=C sort -n ./numbers.txt練習用フォルダに、表の入力と同じ4行だけを記入した numbers.txt を用意してから実行します。見出しは入れません。元のファイルは入力順のままです。
sort ./numbers.txt > ./numbers.txt は使わないでください。シェルが先に出力先を空にするため、元データを失うおそれがあります。保存が必要なときは、出力先が未使用の別名であることを確認します。
結果が想定と違うとき
- 空ファイルなら、並べ替え結果も0行です。ファイルがない場合のエラーとは区別します。
-nは行頭の数値を読みます。見出しや単位付き文字列を混ぜたまま、期待する数値順になると決めつけないでください。- この例は整数だけです。指数表記や先頭の「+」は
-nの対象外です。目的に合う指定は下の公式資料で確認します。 - 通常の並び順は環境の言語設定にも影響されます。まず、この例と同じ入力・指定で比較してください。
重複行もまとめたい場合は、sort -u で重複する行をまとめるを参照してください。
使い方を順番に確認する練習を始めるときは、この手順に沿って進めます
使い方
- Linuxのターミナルを開き、
pwdとlsで現在地・対象を確認します。 - 例に出てくるファイル名・フォルダ名を、自分の環境に合わせます。読み取り・検索・コピー・移動の対象は、実際に存在するものを指定してください。
- 下の注意点を読んだうえでコマンドを入力し、Enterで実行します。
実行するとどうなる?
同じ入力「2・10・100・2」で、sort の文字列順、-n の数値順、-nr の降順を比較します。元ファイルを書き換えず、重複が残ることも確認できます。 このコマンド例はファイルの内容を変更しません。
数字の大きさで並べるときは -n を付けます。LC_ALL=C はこの例の比較条件をそろえる指定です。sort file > file は元ファイルを空にするおそれがあるため使わないでください。
権限に関する注意:アクセス拒否の原因を調べずに、管理者権限や sudo で実行しないでください。
うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント
うまくいかないとき
「No such file or directory」が出たら、現在地・名前・大文字と小文字を確認します。「Permission denied」が出たら、自分が操作してよい場所か確認してください。原因を調べずに sudo を付けないでください。
対象環境:GNU/Linux・Bash。環境やバージョンによって表示が異なる場合があります。