19.【SORT】テキストデータの行を並べ替える

SORTコマンドはASCII形式のデータを行単位で並べ替えをします。並び替えは一般にA→Zの順を「昇順」、Z→Aの順を「降順」といいます。このページでは特に指定がされていない場合は昇順で並べ替えをしています。

昇順、降順は普段から使い慣れていないと、いざというとき「あれっ?昇順だったけ?降順だったけ?」となりますので、どちらか一方をしっかり覚えておくといいでしょう。

通常使用時
書式: SORT [スイッチ] [パス]ファイル名
例: SORT sort-text.txt 
リダイレクト使用時
書式: SORT [スイッチ] < [パス]ファイル名
例: SORT < sort-text.txt
パイプ使用時
書式: コマンドA | SORT [スイッチ]
例: DIR /S | SORT

上記の例は、それぞれ「通常のコマンド使用」「リダイレクトで使用」「パイプで使用」した場合の例となります。通常使用時、リダイレクト共に入力はファイルから受け取り、出力は標準出力であるウインドウに出力していますが、パイプはDIRの実行結果を受け取って直接データを再処理しています。

SORTコマンドはMOREやFINDと同様にパイプ使用時にフィルターとして働くフィルターコマンドの一つです。並び替え作業は、多くの場合人にとっては苦痛を伴う単純作業となりますが、コンピュータにとっては得意分野の一つです。しっかり使えるようにしましょう。

スイッチ一覧

オプションの種類機能
/r逆順で並べ替える
/+n指定した桁数から並べ替える。少ない場合は他の行より前に照合される
/m並べ替えに使うメインメモリのサイズをKBで指定する
/rec numレコードの最大文字数を指定する
/o ファイル名指定したファイルに並び替えた結果を出力する

スイッチはまず「/r」「/+n」を覚えましょう。SORTコマンドは通常、昇順で並べ替えをしますので、/rを使うと昇順の逆順ですから降順で並べ替えをすることになります。

また/+nとするとnで指定した桁数の文字を基準に並べ替えを行います。指定しないと1文字目を基準に並べ替えします。

2020/07/17  09:34    <DIR>          .vscode
2020/07/24  00:48    <DIR>          3D Objects
2020/07/24  00:48    <DIR>          Contacts
2020/08/03  00:46    <DIR>          Desktop

とテキストがあった場合、月で並べ替えるなら「/+6」、日にちで並べ替えるなら「/+9」とすればいいわけです。

それでは、一度コマンドプロンプトで実行してみましょう。
まずはDIRコマンドのみ場合

> DIR
 ドライブ C のボリューム ラベルは Windows10 です
 ボリューム シリアル番号は C841-2070 です

 C:\Users\kobedenshi のディレクトリ

2020/07/25  14:02    <DIR>          .
2020/07/25  14:02    <DIR>          ..
2020/07/17  09:34    <DIR>          .vscode
2020/07/24  00:48    <DIR>          3D Objects
2020/07/24  00:48    <DIR>          Contacts
2020/08/03  00:46    <DIR>          Desktop
2020/07/16  23:56    <DIR>          Documents
2020/08/02  22:20    <DIR>          Downloads
2020/07/24  00:48    <DIR>          Favorites
2020/07/17  00:07    <DIR>          Intel
2020/07/24  00:48    <DIR>          Links
2020/07/24  00:48    <DIR>          Music
2020/08/03  15:28    <DIR>          OneDrive
2020/07/24  00:48    <DIR>          Saved Games
2020/07/24  00:48    <DIR>          Searches
2020/07/24  00:48    <DIR>          Videos
               0 個のファイル                   0 バイト
              16 個のディレクトリ  71,582,953,472 バイトの空き領域

となります。次に同じコマンド使用して、上記のデータをSORTに渡し、昇順で並べ替えをします。

> DIR | SORT

実行結果は以下の通りとなります。

空白行
空白行
               0 個のファイル                   0 バイト
              16 個のディレクトリ  88,045,088,768 バイトの空き領域
 C:\Users\uotaa のディレクトリ
 ドライブ C のボリューム ラベルは Windows10 です
 ボリューム シリアル番号は C841-2070 です
2020/07/16  23:56    <DIR>          Documents
2020/07/17  00:07    <DIR>          Intel
2020/07/17  09:34    <DIR>          .vscode
2020/07/24  00:48    <DIR>          3D Objects
2020/07/24  00:48    <DIR>          Contacts
2020/07/24  00:48    <DIR>          Favorites
2020/07/24  00:48    <DIR>          Links
2020/07/24  00:48    <DIR>          Music
2020/07/24  00:48    <DIR>          Saved Games
2020/07/24  00:48    <DIR>          Searches
2020/07/24  00:48    <DIR>          Videos
2020/07/25  14:02    <DIR>          .
2020/07/25  14:02    <DIR>          ..
2020/08/02  22:20    <DIR>          Downloads
2020/08/03  00:46    <DIR>          Desktop
2020/08/03  15:28    <DIR>          OneDrive

目立つのは、最初の数行が空白行で並び替えられていますね。次にディレクトリーのリスト以外の部分。これらの行の特徴は最初にスペースが入っていることです。昇順にした場合、スペースは数字よりも先に並び替えられることがわかります。

今回はカレントディレクトリのみの並び替え結果ですが、サブディレクトリを含むと、空白行や先頭にスペースを含む行は多くなるでしょう。場合によっては数十行も空白行が続くことになるかもしれません。そうなってしまうとデータとして見にくいものになります。

その場合、MOREコマンドの「/s」や「/+n」スイッチを併用してやると見やすくなります。例として/sスイッチを使って最初の空白行を減らしてみましょう。

> DIR | SORT | more /s

結果は以下の通りで、最初の空白行がまとめて表示されています。

               0 個のファイル                   0 バイト
              16 個のディレクトリ  88,043,945,984 バイトの空き領域
 C:\Users\uotaa のディレクトリ
 ドライブ C のボリューム ラベルは Windows10 です
 ボリューム シリアル番号は C841-2070 です
2020/07/16  23:56    <DIR>          Documents
2020/07/17  00:07    <DIR>          Intel
2020/07/17  09:34    <DIR>          .vscode
2020/07/24  00:48    <DIR>          3D Objects
2020/07/24  00:48    <DIR>          Contacts
2020/07/24  00:48    <DIR>          Favorites
2020/07/24  00:48    <DIR>          Links
2020/07/24  00:48    <DIR>          Music
2020/07/24  00:48    <DIR>          Saved Games
2020/07/24  00:48    <DIR>          Searches
2020/07/24  00:48    <DIR>          Videos
2020/07/25  14:02    <DIR>          .
2020/07/25  14:02    <DIR>          ..
2020/08/02  22:20    <DIR>          Downloads
2020/08/03  00:46    <DIR>          Desktop
2020/08/03  15:28    <DIR>          OneDrive

このようにフィルターコマンドは入出力を併せ持っているので、パイプを使って必要な数の処理をデータに加えていくことができます。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA