大体の言い訳はAB型で片付ける

音楽とかファッションとかITとか

カンマなしのCSVファイルの改行をカンマに変換して、カンマ区切りのCSVファイルを作る

はじめに

・仕事は企画職だけど、たまにユーザー抽出でカンマなしで出てくることがある

SQLとかだと、CONCAT(id,",")で済むんだけど…

Unix(ターミナル)でやってみたかった

・タイトルでゲシュタルト崩壊しそう

 

やってみる

とはいえ、知っているコマンドなんて「cd」「ls」くらいだ…

セットアップに使ったのは全部コピペだし…

 

ちなみに環境はこれ

f:id:nn8ve:20160512001640p:plain

仕事のPCはえるきゃぴたそだけど、自分のPCはまだYosemite。。

※実際コマンド叩いてるだけだしOS環境とか関係ないよなとあとから気づく。

実践

とりあえず擬似idとして適当に数字の一覧的なものを作る。

今回はAtomで作った。

 

f:id:nn8ve:20160515101340p:plain

 

デスクトップに保存。

名前は何でも良かったけど、mv_test_users.csvに。

f:id:nn8ve:20160515101330p:plain

 

あ、デスクトップに保存しちゃった。。

僕はデスクトップにあまりファイルを置きたくないので、csv/tsv/txtらへんは書類のとこにぶちこんでるので、せっかくなのでターミナルで移動してみよう。

 

えーと、ファイルの移動のコマンドは「mv」なので

mv [移動ファイルまたはディレクトリ] [移動先] 

でイケるはず。

 

今回はデスクトップに保存したので、

mv /USERS/ユーザー名/Desktop/mv_test_users.csv /USERS/ユーザー名/Documents

で移動できるみたい。

これをターミナルで実行すると、デスクトップ→書類にファイルが移動されました。

 

ls /USERS/ユーザー名/Documents

で念のため、移動されているか確認。

ちゃんといました(*´ω`*)

 

じゃあ本題の「改行をカンマに変換する」を実行。

改行を置換したい | skmks

によると、

コマンドラインからやるなら

tr '\n' ',' < filename 

が良いとのこと。

正規表現ってやつですね。 

 

とりあえずやってみる。

ちなみにGoogle入力だとバックスラッシュは「Opt」+「Y」で打てます。

 

 さて実行すると、ターミナル上で結果が返ってくる。

 

今回は適当な20件とかだから良いんだけど、実際は100~50万くらいのデータになる可能性があるので、ファイル内で全部片付けてほしい。

(コピペもめんどくさいしね…)

 

< filename > newfilename

(前者が対象となるファイルで後者が出力先となるファイル)

でいけるみたい。

 

実際下記を実行してみる

tr '\n"\' ',' < mv_test_users.csv > new_mv_test_users.csv

 

f:id:nn8ve:20160515104811p:plain

f:id:nn8ve:20160515104813p:plain

になりました。と。今日はめでたし。