しずくぶろぐ

競技ぷろぐらみんぐしたり、なんかしたりします

退屈なことがあったのでプログラミングをしてみた(1)

こんにちは.最近はパソコンと向かい合っていることが多いです,綿谷雫です.

今日は退屈な作業をプログラムにして効率化を図ったのでまとめます.

退屈な作業の内容

ある画像データがcsv形式でいっぱい吐き出される.吐き出されたcsv形式のデータをimageJで開きたいが,imageJは数値だけのcsvデータしか受け付けてくれないので,最初の5行を消したデータを用意する必要がある.とはいえ消す行にも必要な情報があるので別名で保存したい.

以前やっていたこと

csvファイルをマウスでクリックしてExcelで開く.開いたら1~5行選択して,別名で保存する.

やろうと思ったきっかけ

この本を読んでいたら毎回やる作業はスクリプトを書け! 的な圧力を感じたため.

www.morikita.co.jp

作った

次のようなファイルを作成しました.名前はcsv4imageJです.

    for file in *.csv
    do
        sed -n 4p $file
        sed '1,5d' $file > ${file%.*}_del.dcsv
    done    
    for file in *.dcsv
    do
        mv $file ${file%.*}.csv
        echo ${file%.*}'.csv has been made!'
    done

このファイルをターミナルで次のようにchange mode をして命令として使えるようにしました.

chmod u+x csv4imageJ

ターミナルで

./csv4imageJ

と打つとそのディレクトリのcsvファイルが全て処理されimageJが飲みやすいデータが出てきます.

説明

for file in *.csv
do
done

.csv という名前の全てのファイルについてdo からdoneまでの処理を行います.doからdoneの中で使われるファイルの名前は$fileとなります(ドルマークがつく).

        sed -n 4p $file
        sed '1,5d' $file > ${file%.*}_del.dcsv

sed -n 4p $file でファイルの4行目をみています.この情報はみておきたいので.

sed '1,5d' $file > でファイルの中の1から5行目を削除(delete)したものを>の先に渡しています, ${file%.*}_del.dcsvで新しく作ったファイルの名前を某.csvとかから某_del.dcsvという名前に設定しています.無限ループが怖いので一番最後を.csvにするのはやめました,

    for file in *.dcsv
    do
        mv $file ${file%.*}.csv
        echo ${file%.*}'.csv has been made!'
    done

.dcsv で終わっているファイルの名前を.csvに直して,どんな名前のファイルができたか表示させています.これで確認はばっちりです.

感想

Excelを開かなくてよくなっただけで快適度が増しました.これからも精進していきたいです