- ベストアンサー
sortコマンドの使い方
hoge234.dat hoge1.dat hoge8.dat hoge12.dat というファイルを作ったのですが、 これを hoge1.dat hoge8.dat hoge12.dat hoge234.dat という順番で読み込んで処理がしたいのですが、 どうすれば並びかえられるでしょうか? sortじゃなくてlsで並び替えれるのでしょうか? タイムスタンプはバラバラです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。補足です。 #2の2番目の例は、Solaris付属のsortではうまくいかないかもしれません。 (FreeBSD 6.2-RELEASEに入っているsort(GNU版ベースのもの)で確認しました。) 上記環境であれば、(GNU版の)sortだけで出来ました。 -t.(「.」をフィールド区切り) -k1.5,2(第1フィールドの5文字目から第2フィールドの手前までソート比較対象とする。) -n(数値としてソートする。) >ls -1 hoge*.dat | sort -t. -k1.5,2 -n hoge1.dat hoge8.dat hoge12.dat hoge234.dat
その他の回答 (2)
- shuyamakawa
- ベストアンサー率67% (111/164)
sortコマンドは、数値ソート(-nオプション)も、 特定のフィールドだけをソート対象とすることも出来るのですが、 「hoge12.dat」形式だと数値を切り出すのが面倒ですね。 あまりかっこいいやりかたではありませんが、 (一旦数字だけ取り出してソートしてからもとに戻す) >ls -1 hoge*.dat | sed -e 's/hoge\(.*\)\.dat/\1/' | sort -n | sed -e 's/.*/hoge&.dat/' hoge1.dat hoge8.dat hoge12.dat hoge234.dat とか。 ちなみに「hoge.12.dat」のように簡単にフィールド分割できるファイル名にすれば sortコマンドで普通にソートできます。 >ls -1 hoge.*.dat | sort -t. -n -k2,3 hoge.1.dat hoge.8.dat hoge.12.dat hoge.234.dat
- ham_kamo
- ベストアンサー率55% (659/1197)
ちょっと強引かもしれませんが、 ls hoge*.dat | sed 's/hoge\(.*\)\.dat/\1/' | sort -n | awk '{print "hoge" $1 ".dat"}' でできないでしょうか。 Solarisだとawkでなくてnawkじゃないとだめかも。