(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Bash】複数行で一塊のデータを一行毎にまとめる

スポンサーリンク

やりたいこと

以下のように3行で一まとまりの繰り返しデータを

3788
GMOクラウド(株)
6720
3665
(株)エニグモ
1027
3769
GMOペイメントゲートウェイ(株)
11450
...

以下のように一行で表示したい。

3788,GMOクラウド(株),6720
3665,(株)エニグモ,1027
3769,GMOペイメントゲートウェイ(株),11450
...
環境情報
# bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

やり方

以下のワンライナーで冒頭の出力結果になります。今回は「3」行毎に繰り返しますがそれが異なる場合は以下の数字部分を修正してください。

awk 'NR%3 != 0{printf "%s ", $1} NR%3 == 0 {printf "%s\n",$1}' | sed -e s/" "/,/g

以下、補足です。

補足

とある株式データを処理する際に

株式コード
株式名称
株価

という繰り返し構造だったので同処理を行いました。

行番号であるNRを場合分けに利用して改行ありなしを差し込むことでデータを一行にまとめています。
そのままであればスペース区切りとなるため、sedでカンマ区切りとしてCSVファイル扱いがでいるようにしています。