行区切りのデータを適当な行数でまとめる

2015年3月8日日曜日

シェルスクリプト

文で説明しようとすると難しいけど、

$ cat paste.dat
1
2
3
4
5
6
7
8
9

のようなデータがあった時に

1,2,3
4,5,6
7,8,9

にしたい。
これはpasteコマンドを使う。

$ paste -d ',' - - - < paste.dat | sed -e 's/,*$//'

なんでpasteコマンドでこんなことができるかというと
引数として-(ハイフン)を渡すと標準入力から読み込むから。
しかも、-(ハイフン)を書いた回数分、標準入力から読み込むので、
1行目、2行目、3行目を別に読み込んで、くっつけてくれる。

最後にちょうど3の倍数行で終わらなかった場合のために行末の,(カンマ)を削除する。

前回の文字列を繰り返す方法と組み合わせると以下のようになる。

$ paste -d ',' $(printf "%3s" | sed -e 's/ / -/g') < past.dat | sed -e 's/,*$//'

これなら100行毎とかでも対応できる。