確認のみ整理・削除

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
2102100
10100210
1002102
221002

文字列順では「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 で重複する行をまとめるを参照してください。

使い方を順番に確認する練習を始めるときは、この手順に沿って進めます

使い方

  1. Linuxのターミナルを開き、pwd と ls で現在地・対象を確認します。
  2. 例に出てくるファイル名・フォルダ名を、自分の環境に合わせます。読み取り・検索・コピー・移動の対象は、実際に存在するものを指定してください。
  3. 下の注意点を読んだうえでコマンドを入力し、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。環境やバージョンによって表示が異なる場合があります。

公式マニュアルで詳しく確認する(英語)

同じカテゴリのコマンド

コマンド一覧に戻る