事の始まりは僕のこのTW。
これは便利!bash使いの人にとっては当たり前すぎるのでしょうが。for gzfile in $( ls . | grep .gz$ ); doでフォルダの中のfastq.gzを一気に処理できるんですね。
— Shinichi Nakagawa (@smoltblue) 2018年6月18日
bashのfor文でよく使うものメモ https://t.co/4hHuoeonD7
早速専門家のツッコミが入ります。
普通は for gzfile in *.gz; do とすべきでは。ファイル名にスペースなどかあるとおかしくなるし…。 https://t.co/QOmaV1wSeS
— Hoshi Takanori (@hoshi_takanori) 2018年6月18日
これ意図がわからないが単に for x in *.gz; do としない理由は何だろう? for x in $(ls|grep \.gz$) ではファイル名に空白が含まれていると悲惨なことになりそうな気がする https://t.co/vCCi3AlKKd
— Haruhiko Okumura (@h_okumura) 2018年6月19日
こういうアドバイスは本当にありがたいですね。早速サルマップのほうもアップデートしたのですが、ツッコミはこれにとどまらず。どうやらプログラマーのツボにハマったみたいで、、、
ls | awk '{print "gzfile "$1}> https://t.co/up9S9kyYVQ
— しこりびと (@n0rr) 2018年6月19日
sh https://t.co/up9S9kyYVQ
しています。
アドホックな処理ばかりなので、あとで困ったときに処理を振り返りたいのです
自分の場合は
— Endo, Takaho (@caripso) 2018年6月19日
for x in *.gz; do echo "gunzip ${x}"; done
としておいて出力するコマンドに問題がないか一行試して、大丈夫ならechoを外してバッチ処理します。
ディレクトリ内にシェルスクリプトだらけになっても後から振り返りようがないので。
for f in *.gz; do gzip -d ${f}; done を一番良く使いますけど、まれにディレクトリに glob が使えないくらい大量のファイルがある場合には、ls | egrep '\.gz$' | xargs -n 1 gzip -d とかかなあ。サブディレクトリを含む場合は find -name '*.gz' -exec gzip -d {} \; とか。
— 惑っている情報系センター教員 (@tsuchm) 2018年6月19日
おおっ!これはなんだかミニプレップのレベルをとうに超えてます。さらにコメント続きます。
デバッグ用に echo を一度入れるのは同じ。処理の振り返りが必要な場合は、history を使ってます。
— 惑っている情報系センター教員 (@tsuchm) 2018年6月19日
私はxargsは今ひとつ好きになれないのでfindですね。NGSデータはディレクトリが深いことも多いので。また-execに書ききれない場合はfor x in `find ./ -name "*.gz"`という感じで。大量のファイルだといつも壊れている可能性があるのでファイルチェック処理を入れたいということもあります。
— Endo, Takaho (@caripso) 2018年6月19日
どんな作業もいきなり本番は危険ですね・・・。
— Endo, Takaho (@caripso) 2018年6月19日
処理時間がかかる場合はecho `date` ${x}と入れておくと経過状況が分かって便利です。
ファイルを消すときはいきなりrmしないで ls して出力確認してから ls | xargs rm するというやつですね。繰り返しがあり3回以上コピペするようであれば効率いい方法に切り替えないと、オペレーションミスで悲惨なことになるので、この手のテクニックは単なる曲芸でなく重要な手順と思います。
— Ⓝ (@iNut) 2018年6月19日
僕なら
— ツバサ (@wingedtw) 2018年6月20日
find -type f -name "*.gz" -exec gzip -d {} \;
かなー。1処理の時だけだけど。 https://t.co/mC12f9Qcpw
なんだか一気に賢くなった気がします。次はぜったいコピペでなくてシェルスクリプト書くんだ!とモティベーションアップ↑↑↑です。
それにしても、この、インフォ界隈の人々の助言文化、素晴らしいなあと思います。一昔前はBio Technical フォーラムで自分も知らない分子生物学系のトピがたくさん立ってとても勉強になりましたが、最近はこちらのリテラシーも向上して落ち着いている感じ。素人質問に始まりリテラシーが向上してゆく過程は、なんだかとてもワクワクします。下手の横好きのなんちゃってインフォがやめられないのは、このワクワク感も大きいような気がします。とまれ、今日のフレーズはこれ!
for filename in *.gz; do
echo $filename
echo `date` ${x}
...
done