月別アーカイブ: 2014年9月

猫を届けに行く

東の方に子猫をとどけに行った。素敵な里親さん親子にお引き渡ししてきた。幸せになれよ。

20140903_14

こちらはいつもの猫写真。いかすみ猫とかぼちゃ。

火曜、遺伝研

20140902_2

3:40 起床。まっくら。4:45 頃デスク着。次第に晴れて暑くなってきた。事業の会議とラボの会議。

昼休みのお題にやってみました。昨日の質問にあった、連番を含むファイル名がいくつもあって、番号部分に全部20とか足してリネームしたい。は bash だけ(と mv)で無理やりやると、以下のようになります(zsh だとマッチした文字列がどう格納されてるか知らんのでだれかなんとかしてください)

ディレクトリに hoge1.fa hoge2.fa hoge3.fa があったとして、以下のシェルスクリプトで hoge21.fa hoge22.fa hoge23.fa になるはずです。

for i in *; do if [[ "$i" =~ ^([^0-9]*)([0-9]+)([^0-9]*)$ ]] ; then l=${BASH_REMATCH[1]}; n=`expr "${BASH_REMATCH[2]}" + 20`; r=${BASH_REMATCH[3]}; mv $i $l$n$r; fi; done;

【追記】構造がわかりにくいから、ここはワンライナーじゃなくてファイルに書くべきですわな。

#!/bin/bash

for i in *; do
    if [[ "$i" =~ ^([^0-9]*)([0-9]+)([^0-9]*)$ ]] ; then
	l=${BASH_REMATCH[1]}                # 先頭の数字でない部分 ^([^0-9]*)
	n=`expr "${BASH_REMATCH[2]}" + 20`  # 数字の部分 ([0-9]+) に 20 足す
	r=${BASH_REMATCH[3]}                # 末尾の数字でない部分 ([^0-9]*)$
	mv $i $l$n$r
    fi
done
yn@ynAir:~/test $ ls
hoge1.fa	hoge2.fa	hoge3.fa	plus20.sh*
yn@ynAir:~/test $ ./plus20.sh
yn@ynAir:~/test $ ls
hoge21.fa	hoge22.fa	hoge23.fa	plus40.sh*

で、上記のスクリプトに plus20.sh という名前をつけてその場で実行したら、このスクリプトの名前も plus40.sh になってしまって吹いた。そりゃそうだw

【追記】先につくっていた方がいました。この方の方法は、sed というコマンドを使っていて、ファイル名パターン決め打ちですが、全体がスッキリしてますね。

7 pm 撤収。

月曜、東大農学部。雨

20140901_12

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ)速習コース(2014年9月1日~12日)のしょっぱなの二枠を講義。疲れました *__*)/