【システム】シェルスクリプトで CSV → タブ区切りデータに変換
- Taiju YONEDA
- 2023年10月18日
- 読了時間: 1分
更新日:2023年10月20日
ディレクトリ内のコンマ区切りデータ(.CSV)をタブ区切りデータ(.TSV)に変換します。
csv_tsv.sh
#!/usr/bin/zsh
for FILE in *.csv
do
cat $FILE | LC_CTYPE=C tr "," "\t" > ${FILE%.csv}.dat
done
しょうもないですが、備忘録として。環境はMacのzsh。
ミソはtrコマンドの前に"LC_CTYPE=C"を付けること(参考:クロジカさんhttps://tech.kurojica.com/archives/24837/)。意味はよく知りませんが、これがないと、"tr: Illegal byte sequence"と怒られてしまいました。
このスクリプトを実行
sh csv_tsv.sh
ディレクトリ内のコンマ区切りデータ(CSV)がタブ区切りデータ(TSV)に変換できます。(好みで拡張子は.datにしていますが、グラフ描画ソフトgnuplotの処理では関係ないらしいので、今回は気にしてません。)
【経緯】
数値シミュレーションソフトの解析データはタブ区切り(TSV)、実験装置の測定データはコンマ区切り(CSV)で出力されていました。
gnuoplotでは2種類のデータ形式が混在した状態ではプロットが面倒です。
se dataf sep "\t ,"
というように、separator文字を、「タブ」「空白」「コンマ」というように複数指定しておけば、それぞれの形式データを一気にプロットできるらしいです(参考:ゴルディアスの涙目さんhttps://gordiustears.net/data-separator-on-gnuplot/)。で、試してみたのですが、"warning: Skipping data file with no valid points"と言うことを聞いてくれません。しかたがないので、データ形式をどっちかに統一することにしました。ただ、データファイルは100個以上あるので、手動では大変。シェルスクリプトで自動化処理をやりました。
Comments