道具としてのコンピュータ
2014年1月28日
だらだら書かれたテキストファイルをShellでCSVに整形する
原稿整理もShellでだいぶスピードアップが図れているこのごろ。
1つのファイルにまとまっていたデータの整形を工夫して加工したメモです。
[xxx@xxxx]$ cat mondai Q1.徳川幕府の初代将軍はだれか? ① 徳川家康 ② 徳川家光 ③ 徳川秀忠 答え ① Q2.「源氏物語」の作者はだれか? ① 清少納言 ② 紫式部 ③ 藤原道綱母 答え ②
というmondaiファイルがあります。
これを1問1行で、カンマ区切りのファイルにする必要に迫られました。
問題は200問あります…。さすがに手作業は厳しい。
1コマずつセルに張り付けている間に、絶対眠くなる…。
そこで今回はShellでごにょごにょと加工してみることにしました。
まず無駄なタブや改行、空白をsedで取り除きます。
[xxxx@xxxx]$ sed '/^$/d' mondai | sed -e 's/t//g' | sed 's/ //g' > mondai2 Q1.徳川幕府の初代将軍はだれか? ①徳川家康 ②徳川家光 ③徳川秀忠 答え① Q2.「源氏物語」の作者はだれか? ①清少納言 ②紫式部 ③藤原道綱母 答え②
このあとファイルを「Q[0-1]で始まる行」ごとに分割します。
ファイル分割はcsplitというコマンドでできます。とても便利!
[xxx@xxxx]$ csplit -z -f mondai- -n 4 mondai2 /^Q[0-9]/ {*} 104 104 <略> [xxx@xxxx]$ ls mondai mondai-0000 mondai-0001 mondai-0002 mondai-0003 mondai-0004 mondai-0005 mondai-0006 <略> [xxx@xxxx]$ cat mondai-0001 Q2.「源氏物語」の作者はだれか? ①清少納言 ②紫式部 ③藤原道綱母 答え②
※参考
テキストファイルを任意の文字列で分割するには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a072csplit.html
ここからawkの力技?でカンマ区切りにしてしまいましょう。
[xxx@xxxx]$ for file in `ls mondai-*`; do tateyoko $file | awk '{print $1","$2","$3","$4","$5}' >> result.csv ;done [xxx@xxxx]$ cat result.csv Q1.徳川幕府の初代将軍はだれか?,①徳川家康,②徳川家光,③徳川秀忠,答え① Q2.「源氏物語」の作者はだれか?,①清少納言,②紫式部,③藤原道綱母,答え②
ということで、無事CSVに書きだすことができました。
原稿整理にもShellは便利。
さらに精進して早期入稿を目指す所存にございます。
Related Posts