世の中、データやりとりにはExcel系ソフトが使われる事が多いですね。
フツーに使ってくれている分には問題ないのですが……
見栄えの問題なのか、縦横数個のセルをつかったレイアウトがゾロゾロ並んでるようなのも存在します。
これが上掲画像のようにカード式に縦横に並んでいたりしたら最悪……。
しかも日付ごとにソートしろとか言われる始末です。
今回はこういう状況下で意地でもコピペをしないためにアレコレやった作業メモを残しておきます……。
実際のところ
CSVを加工
CSVを加工。
カード式はありがた迷惑な事に、複数行にて構成されています。
使いにくい事この上ないので、まずは改行を全部消してしまします。
$ cat data.csv | tr -d "\r\n" > onelinedata.csv
次に、カードごとに改行を挿入します。
レイアウト末尾に現れる特徴的な部分を使って、改行コードを挿入します。
$ cat onelinedata.csv | sed $'s/注文済/\\\n/g' | sed -e 's/^,//g' > eachlinedata.csv
この段階でカード毎に一行とっているはず。
あとは、cutコマンドで必要な情報を切り出したり、半端に残った文字を消したり半角を全角で統一したりと試行錯誤して、OKなら出力
$ cat eachlinedata.csv | cut -d',' -f3,6,10,18,21,22 | tr -d "出荷日" | nkf > sheet1.csv
報告書の様式によりますが、今回はカード式の情報全部をやる必要があったので
今回下準備でつくったsheet3枚分を結合
$ cat sheet1.csv >> result.csv $ cat sheet2.csv >> result.csv $ cat sheet3csv >> result.csv
最後に念のため中身を目grepしておき*1、この手の方が大好きな「フォーマットの調整」をおこなってEXCEL系データとして出力すれば完了。
手でやっていたら何時間掛かったかわかりませんが、スクリプト化は実作業全部で20分もしませんでした。
やっぱりテキストデータ加工が正義、はっきりわかんだね。
蛇足:当時のボヤキ
非人道的カード記述型Excel方眼紙をご提供頂いたので、CSVに変換してシェル・ストにて応じるなどした
— 木野修造@零細事業主 (@shuzo_kino) December 18, 2018