mots quotidiens. | |
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp | by hns, version 2.10-pl1. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||
モデルなどの名前に "model.9" "model.10" .. などと数字を付けることは クラスタリング等でよくあると思いますが, この間IWSLT関係の仕事で, "model.0"〜"model.19" という名前がついたファイルを, それぞれ "model.1"〜"model.20" にリネームする必要があった。
for f in model.*; do rename 's/\.(\d+)$/".".($1+1)/e' $f doneとすればいいですが(マニアック!), 実は上のファイル名グロブ "model.*" は普通は 文字列としてソートされるため, "model.1" "model.10" "model.11" .. "model.2" のように展開されてしまうので, 上ではうまく行かない(ファイルがどれか失くなってしまう)。
ごく一般的に, 数字を含んだファイル名を数値の部分を考慮して並べたいことは
よくあると思いますが,
Macintosh System7 には数字を含んだ文字列を「自然に」ソートする
ための Stuart Cheshire 氏による"Natural Order" という素晴らしいINITが1994年頃
からあって (上の画像),
機能拡張フォルダに入れておくだけで, システムの文字列比較関数を書き換えて,
Finder等のファイルが期待した通りに並ぶようになる。
[Natural Order Numerical Sorting]
これには上の画像にあるようにソースが付いているので, 前からやろうと思っていた
通り, 週末にちょっと工作して Unix で使えるようにしよう.. と思って
少し調べたら, すでに誰かがやっていた;。まあ確かに, ごく自然に
考えつきそうなことではあるけれども..。
[Natural Order String Comparison]
by Martin Pool 氏。
このページには perl, C, Haskell, Ruby, Python, Java, Javascript による実装例
が載っていて, GNU ls では, "--sort=version" を指定すると常に natural order
ソートになるらしい。確認したところ, 確かにそうなる模様。
ただ, 上のファイル名グロブはシェルが行うものなので, 後は zsh にパッチを当てれば
いいかな.. と思って下調べをしたら, これもすでにオプションが存在していた。
ガーン。;;
setopt numericglobsortとしておくと, 最初の例のようなファイル名展開が "model.1" "model.2" .. "model.10" のように「自然な」順番になる模様。 これはX68000版の zsh のマニュアルに含まれる zshintro.jp に書いてあるので 読んでいたはずなのだが, 何となく見落としていたらしい。(;_;)
というわけで, まとめると
タイトル一覧 |