• ベストアンサー

sortコマンドの使い方

hoge234.dat hoge1.dat hoge8.dat hoge12.dat というファイルを作ったのですが、 これを hoge1.dat hoge8.dat hoge12.dat hoge234.dat という順番で読み込んで処理がしたいのですが、 どうすれば並びかえられるでしょうか? sortじゃなくてlsで並び替えれるのでしょうか? タイムスタンプはバラバラです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.2

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)
回答No.1

ちょっと強引かもしれませんが、 ls hoge*.dat | sed 's/hoge\(.*\)\.dat/\1/' | sort -n | awk '{print "hoge" $1 ".dat"}' でできないでしょうか。 Solarisだとawkでなくてnawkじゃないとだめかも。

関連するQ&A