読者です 読者をやめる 読者になる 読者になる

手元の文字列をsortコマンドでソートする

Windowsコマンドプロンプト

こんにちは、「コマンドラインは友達」のwakです。Windows 10になっても未だにちょっとした強化が行われたコマンドプロンプトですが、こちらを使ったちょっとした小ネタを書きます。

f:id:nurenezumi:20150803172556j:plain

問題

メモ帳に次のような文字が並んでいます。これをアルファベット順に並べ替えたいのですが、なるべく手軽で速い方法は何でしょうか?

f:id:nurenezumi:20150803171716p:plain

解答

  1. 並べ替える内容をクリップボードにコピーします。
  2. コマンドプロンプトを開きます。Windowsキー→「cmd」→エンターキー、またはWindowsキー+[R]→「cmd」→エンターキーで起動するはずです。
  3. sort | clip と入力してエンターキーを押します。
  4. 入力待ちになるので、右クリック→貼り付け(P)ででクリップボードの内容をペーストします。Windows 10ならCTRL+Vでできるようになりました(事前設定が必要ですが)。
  5. [CTRL]+[Z]を押し、エンターキーを押します。
  6. 終わり! 結果がクリップボードに上書きされています。
f:id:nurenezumi:20150803171746p:plain

解説

sortコマンドは標準入力*1から渡された複数の文字列(改行区切り)をソートして標準出力*2に吐き出すコマンドです。ですから普通に起動すると、

f:id:nurenezumi:20150803171756p:plain

このように入力待ちになります。ここにソートする対象の文字列をキーボードから入力していけばいいのですが、今はそのかわりにクリップボードからの貼り付けを行いました。

入力する内容は改行(エンターキー)でいくらでも入力していくことができます。では入力を終えるためにはどうしたら良いかというと、ここは古の昔からEOF (End Of File)というものを使うと決まっています。これはキーボードから直接入力することができ、そのキーシーケンスが[CTRL]+[Z]です。

EOFを検知するとsortコマンドはそこで入力受付を終了し、与えられた文字列のソート処理を行います。その結果は標準出力に出力されますので普通に表示されます。

f:id:nurenezumi:20150803171950p:plain

この結果を標準出力へ出力する(つまりモニターに表示する)のではなく、クリップボードに出力するための切り替えが | clipです。同じような話を以前書きました。

tech.sanwasystem.com

ソート順をひっくり返して降順に並べ替えたいときはsort /R | clipのように/Rオプションを付けましょう。

f:id:nurenezumi:20150811092039p:plain

以上です。もちろんExcelに貼り付けてソートをしたって構いませんし、かかる時間もそう大きくは変わりませんが、キーボードとマウスの持ち替えのような思考を邪魔する作業はなるべく排除していきたいものですね。

*1:うんと簡単に言うとキーボード

*2:うんと簡単に言えばモニター