カンマなしのCSVファイルの改行をカンマに変換して、カンマ区切りのCSVファイルを作る
はじめに
・仕事は企画職だけど、たまにユーザー抽出でカンマなしで出てくることがある
SQLとかだと、CONCAT(id,",")で済むんだけど…
・Unix(ターミナル)でやってみたかった
・タイトルでゲシュタルト崩壊しそう
やってみる
とはいえ、知っているコマンドなんて「cd」「ls」くらいだ…
セットアップに使ったのは全部コピペだし…
ちなみに環境はこれ
仕事のPCはえるきゃぴたそだけど、自分のPCはまだYosemite。。
※実際コマンド叩いてるだけだしOS環境とか関係ないよなとあとから気づく。
実践
①
とりあえず擬似idとして適当に数字の一覧的なものを作る。
今回はAtomで作った。
②
デスクトップに保存。
名前は何でも良かったけど、mv_test_users.csvに。
③
あ、デスクトップに保存しちゃった。。
僕はデスクトップにあまりファイルを置きたくないので、csv/tsv/txtらへんは書類のとこにぶちこんでるので、せっかくなのでターミナルで移動してみよう。
えーと、ファイルの移動のコマンドは「mv」なので
mv [移動ファイルまたはディレクトリ] [移動先]
でイケるはず。
今回はデスクトップに保存したので、
mv /USERS/ユーザー名/Desktop/mv_test_users.csv /USERS/ユーザー名/Documents
で移動できるみたい。
これをターミナルで実行すると、デスクトップ→書類にファイルが移動されました。
ls /USERS/ユーザー名/Documents
で念のため、移動されているか確認。
ちゃんといました(*´ω`*)
④
じゃあ本題の「改行をカンマに変換する」を実行。
によると、
コマンドラインからやるなら
tr
'\n'
','
< filename
が良いとのこと。
正規表現ってやつですね。
とりあえずやってみる。
ちなみにGoogle入力だとバックスラッシュは「Opt」+「Y」で打てます。
さて実行すると、ターミナル上で結果が返ってくる。
今回は適当な20件とかだから良いんだけど、実際は100~50万くらいのデータになる可能性があるので、ファイル内で全部片付けてほしい。
(コピペもめんどくさいしね…)
< filename > newfilename
(前者が対象となるファイルで後者が出力先となるファイル)
でいけるみたい。
実際下記を実行してみる
tr '\n"\' ',' < mv_test_users.csv > new_mv_test_users.csv
と
が
になりました。と。今日はめでたし。