sort コマンドは完全な行を読み、選択した比較規則で並べ、結果を stdout へ書きます。出力操作を明示しない限り、入力ファイルは変更しません。
テキスト操作 · レッスン 12
sort
sort を使い、テキスト行を辞書順、数値順、または選択したフィールド値で並べる方法を学びます。
行全体を並べ替える
animals.txt を昇順に並べます。
dog
cow
cat
elephant
bird
$ sort animals.txt
bird
cat
cow
dog
elephant
テキストの順序は現在のロケールに従うため、大文字小文字、アクセント、句読点の扱いが変わることがあります。スクリプトで再現可能なバイト順が必要なら、LC_ALL=C sort animals.txt のように一貫したロケールを使います。
$ LC_ALL=C sort animals.txt
キーや数値オプションなしの sort animals.txt は何をしますか?
結果を逆順にする
-r を付けると比較結果が逆になります。
$ sort -r animals.txt
elephant
dog
cow
cat
bird
animals.txt を逆順に並べるコマンドはどれですか?
数値を比較する
辞書順は文字を比較するため、通常 10 は 2 より前になります。通常の数値比較には -n を使います。
$ printf '10\n2\n30\n' | sort -n
2
10
30
必要ならオプションを組み合わせます。sort -nr scores.txt は数値で比較し、大きい値から並べます。
scores.txt の数値行を大きい順に並べるコマンドはどれですか?
フィールドで並べ替える
キーは -k START[,END] で選びます。標準では連続する空白がフィールド区切りです。コロン区切りなら -t ':' を使います。
$ printf 'alice:30\nbob:8\ncarol:20\n' | sort -t ':' -k 2,2n
bob:8
carol:20
alice:30
-t ':' が区切り、-k 2,2 がキーをフィールド 2 だけに限定し、末尾の n が数値比較を指定します。,2 がない場合、フィールド 2 から始まるキーは通常、行末まで続きます。
users.txt の第 2 コロン区切りフィールドだけを数値順にするコマンドはどれですか?
重複を除き、出力を保存する
-u は、選択した比較キーが等しいものごとに 1 行を出力します。
$ sort -u names.txt
$ sort names.txt > names-sorted.txt
並べ替えと重複除去を同時に行います。入力と異なる出力先なら通常のリダイレクトで構いません。sort names.txt > names.txt はシェルが読み取り前に入力を切り詰めるため使わないでください。GNU sort で同じパスへ意図的に書くなら次を使えます。
$ sort -o names.txt names.txt
元データが重要なら、バックアップを取るか、別に書いた結果を検証してください。
GNU/Linux で、シェルリダイレクトによる切り詰めを避け、並べ替え結果を names.txt へ安全に書き戻すコマンドはどれですか?
行指向データの並べ替えを練習するには、次のラボを試してください。
- Linux sort コマンド:テキストの並べ替え - テキスト行を昇順、降順などで並べます。
- 単語数の集計と並べ替え - 単語数と並べ替えを組み合わせてデータを分析します。
レッスン完了
sort を完了しました
並べ替えるテキストの比較規則と出力先を選べるようになりました。
再現性が重要なら明示したロケールで行全体を並べる。
-rで結果を逆順にする。-nで数値を比較する。-tと-kで範囲を限定したフィールドキーを選ぶ。入力を切り詰めずに重複を除去または結果を保存する。