min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

awk (入力じゃなくて)出力の区切り文字を指定する(カンマ区切りで各フィールドを出力したい)

f:id:min117:20201107095548p:plain

bashawk、python3でcsvファイルを自由自在にしたい。都度調べるのがダルいので手に覚えさせる

 

サンプルcsvはこれ。上場企業の当期利益と資本金を一覧にしてみる。

hesonogoma.com

 

とりあえずアタマの50件だけダウンロード。

f:id:min117:20201107093612p:plain

 

$ cat japan-all-stock-financial-results_20180901.csv | wc

f:id:min117:20201107093703p:plain

 

$ vim japan-all-stock-financial-results_20180901.csv

f:id:min117:20201107093246p:plain

 

「名称」「当期利益」「自己資本」だけ取り出してみる。

cat japan-all-stock-financial-results_20180901.csv | awk -F, '{print $2,$8,$10}'

f:id:min117:20201107093856p:plain

石油会社やら建設会社やら多いなぁ。コロナ禍でもシコタマ儲けてやがる。

 

ダブルクオートがウザいのでsedで取り払う

cat japan-all-stock-financial-results_20180901.csv | awk -F, '{print $2,$8,$10}' | sed -e s/\"//g

f:id:min117:20201107094532p:plain

うむ。

 

さて、 awk -F, '{print $2,$8,$10}'  でprintしたので各項目の区切り文字が空白になってしまっている。

f:id:min117:20201107094901p:plain

awkのprint文では、各フィールドをカンマで区切る出力は空白になる仕様だから。紛らわしいが慣れるしかない。

 

で。これをカンマ区切りにして出力したい。つまりこうしたい

f:id:min117:20201107095129p:plain

こうやる。

cat japan-all-stock-financial-results_20180901.csv | awk -F, 'BEGIN{OFS=","}{print $2,$8,$10}' | sed -e s/\"//g 

f:id:min117:20201107095312p:plain

BEGIN{} の中でawkで使うOFSをカンマに指定してやればOK。

 

it-ojisan.tokyo

f:id:min117:20201107095426p:plain

 

これと同じことをbashでもできるみたい。

f:id:min117:20201107095824p:plain

 

応用の幅が広そう。次回試す。

www.shell-tips.com