概要
以下、自分用のメモです。使いたいときによく忘れるので、ここにメモメモ。。。
大した話では無いのですが、ファイル名に連番が付与されているものが複数存在している場合に、sortして表示したいときが結構あります。
んで、付与されている連番が 01 や 001 のようにゼロ埋めされている場合はソートしやすいのですが、単純に 1, 2, 3, ... のように振られている場合は、そのままソートしても望みの形になりません。
その場合は、sort -V
でソートするといい感じにソートしてくれます。
試してみる
とりあえず、確認用に20ファイル作成。
$ touch data{1..20}.txt $ ls data10.txt data12.txt data14.txt data16.txt data18.txt data1.txt data2.txt data4.txt data6.txt data8.txt data11.txt data13.txt data15.txt data17.txt data19.txt data20.txt data3.txt data5.txt data7.txt data9.txt
そのまま sort に繋いでみます。
$ ls -1 | sort data10.txt data11.txt data12.txt data13.txt data14.txt data15.txt data16.txt data17.txt data18.txt data19.txt data1.txt data20.txt data2.txt data3.txt data4.txt data5.txt data6.txt data7.txt data8.txt data9.txt
よく見る光景ですね。では、sort -V
でやってみます。
$ ls -1 | sort -V data1.txt data2.txt data3.txt data4.txt data5.txt data6.txt data7.txt data8.txt data9.txt data10.txt data11.txt data12.txt data13.txt data14.txt data15.txt data16.txt data17.txt data18.txt data19.txt data20.txt
いい感じに表示されました。
-V
(ロングオプションは --version-sort
) の説明は以下のようになっています。
natural sort of (version) numbers within text
参考情報
sort invocation (GNU Coreutils 9.1)
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。