2021.06.25

sortコマンドとは?Linuxコマンドでファイルの中身を並び替えする方法をご紹介

The word linux on wooden cubes, on a dark background, symbols signs

皆さんこんにちは!
Linuxのコマンドを使いこなしていますか?

Linuxには便利なコマンドが多数存在します。
サーバー管理に欠かせないコマンドの中から今回は、sort(ソート)コマンドをご紹介いたします。

目次
sortコマンドとは?
sortコマンドの使い方
sortコマンドを使ってみよう!
sortコマンドの主なオプションたち
データを文字ではなく、数値として並び変える 【-n オプション】
降順にデータを並び変える 【-r オプション】
キーを指定して並び変える【-k と -t オプション】
sortコマンドの結果をファイルに出力
まとめ

sortコマンドとは?

sortコマンドとは、テキストファイルの中身を行単位で並び変えたいときに利用されるLinuxコマンドです。

テキストファイルだけではなく、CSVファイルにも対応しているので比較的便利なコマンドといえるでしょう!
また、パイプ(|)で他のコマンドの出力結果をさらにソートする際に利用されたりもします。

それでは、sortコマンドの使い方について具体的にみていきましょう!

sortコマンドの使い方

sortコマンドの基本書式は、以下の通りです。

 $sort [オプション]  ファイル名

このように単純な記述でファイルの文字列を並びかえることができ、便利ですね!!
ただし、sortコマンドでは左側にある文字からソートをかけるため、数値順に並びませんので要注意です!

sortコマンドを使ってみよう!

それでは、sortコマンドを使用してみましょう!

今回は「example.txt」の内容をソートしてみましょう!

まず、「example.txt」の内容は下記のようなものです。

 $cat example.txt
 32
 1
 111
 567
 22222
 9

それでは、早速上記のファイルをsortコマンドでソートしてみましょう。

実行結果

 $sort example.txt
 1
 111
 22222
 32
 567
 9

「あれ?全然ソートされてないよ?」
と感じられるかもしれませんが、先ほどの通りsortコマンドは左側にある文字からソートをかけるため、数値順に並びません。

「じゃあ使えないな」と感じるかもしれませんが、「オプション」を利用することで文字としてだけではなく数値として降順に並び変えたりなどいろいろな並び変えることができるようになります。

では、そんな便利なオプションたちをみていきましょう!

sortコマンドの主なオプションたち

オプション 説明
-n データを文字ではなく、数値として並び変える
-r 降順にデータを並び変える
-u 重複を排除して並び変える
-f 大文字と小文字を区別なく並び変える
-b 先頭に挿入されている空白を無視して並び変える
-k キーを指定して並び変える(下記「-t」と併用)
-t 区切りの文字を指定する(下記「-k」と併用)

ここからいくつか具体的に使用法をみてみましょう!

データを文字ではなく、数値として並び変える 【-n オプション】

こちらのオプションを利用することで、データを数値として処理できるようになります。
ですので、先ほどのファイルも数値順に違和感なくソートできるはずです!

 $cat example.txt
 32
 1
 111
 567
 22222
 9

それでは、先ほどファイルを用いて見ていきましょう。

実行結果

 $sort -n example.txt
 1
 9
 32
 111
 567
 22222

これで数値の並び変えはバッチリですね!

降順にデータを並び変える 【-r オプション】

もうすでにお気付きかと思いますが、sortコマンドは標準で「昇順」でのソートとなっています。
しかし、「降順」でソートしたいときもあるかと思います。

そんなときはこの「-r」オプションをご利用ください!

今回は、先ほど取り上げた「-n」コマンドと併用していこうと思います!

 $sort -nr example.txt
 22222
 567
 111
 32
 9
 1

こちらのコマンドも使いどころがありそうですね!

キーを指定して並び変える【-k と -t オプション】

一見何をいっているか分かりにくいかと思いますがこのコマンドがよく使われるパターンを用意しました!

 $cat example_2.csv
 OSAKA,M,20,STUDENT
 TOKYO,F,26,STUDENT
 KANAGAWA,F,23,STUDENT
 KYOTO,M,21,STUDENT
 OKINAWA,F,42,STUDENT
 NAGANO,M,19,STUDENT

こちらはCSVファイルです!
このCSVファイルをソートする際にこのコマンドがかなり役に立ちますのでぜひマスターしてみてください!

ただし、基本の書式とは少し書き方が違うため注意が必要です。

基本書式

$ sort -k 並べ替えに使う列番号 -t 区切りに使うキー文字 ファイル名

今回は例として2列目を並び変えたいと思います!

 $sort -k 2 -t , example_2.csv
 TOKYO,F,26,STUDENT
 KANAGAWA,F,23,STUDENT
 OKINAWA,F,42,STUDENT
 OSAKA,M,20,STUDENT
 KYOTO,M,21,STUDENT
 NAGANO,M,19,STUDENT

できました!
また、数値を扱いたい場合は列番号の後ろに「n」をつけると数値として処理できます。

 $sort -k 3n -t , example_2.csv
 NAGANO,M,19,STUDENT
 OSAKA,M,20,STUDENT
 KYOTO,M,21,STUDENT
 KANAGAWA,F,23,STUDENT
 TOKYO,F,26,STUDENT
 OKINAWA,F,42,STUDENT

CSV作成の際にぜひお役立てください!!

sortコマンドの結果をファイルに出力

ここまで、ご紹介してきたsortコマンドはコマンドライン上にのみ表示され、ファイルの中身が書き変わるわけではありません!

そこで、大量のファイルを処理したい場合や出力結果がほしい場合は「リダイレクト」でファイルを生成しましょう!

リダイレクトの基本書式

 $sort 並び変え元のファイル > 出力先ファイル

つまり、「example.txt」を数値としてソートして「example_sort.txt」へ出力する場合はこのようになります!

 $sort -n example.txt > example_sort.txt

まとめ

今回は、sortコマンドについてご紹介させていただきました。
sortコマンドには、さまざまなオプションがあり、使いこなすことでかなり便利にサーバーを管理できるようになりそうですね。

今後もLinuxコマンドをご紹介していく予定ですので、ぜひご覧くださいね!

コマンド集
文字列を検索する「grepコマンド」
ファイルの中身を確認する「catコマンド」
ファイルやディレクトリを検索する「findコマンド」

この記事を書いた人

髙松 GMOグローバルサイン・HD

2019年に総合職として新卒入社しました。
これから自分のできることを探していきたいと思っています。

プライベートでは、野球をしたり、Pythonの勉強をしたりしています。
将来は、クラウドアカデミー編集長の田(でん)さんの弟子になりたいです。

GMOクラウドアカデミーYouTubeチャンネルはこちらから

アカデミー用バナー

メルマガ会員募集中!

アカデミーの最新情報や会員限定のお得な情報をお届けします。

メルマガ登録はこちら