レコードを作る。
a1,a2,a3,b1,b2,b3,c1,c2,c3 d1,d2,d3,e1,e2,e3,f1,f2,f3 ...
以上のデータが a.txtに入っているとして
cat a.txt|sed 's/,/\n/g'|ruby -e 'while !STDIN.eof? ; print [gets,gets,gets].map{|i|i.chop}.join(","),"\n" ; end'
でよい。
例
$ seq 12|ruby -e 'while !STDIN.eof? ; print [gets,gets,gets].map{|i|i.chop}.join(","),"\n" ; end' 1,2,3 4,5,6 7,8,9 10,11,12
別解
$ seq 12|ruby -e 'print STDIN.read.gsub(/(.*?)\n(.*?)\n(.*?)\n/,"\\1,\\2,\\3\n")' 1,2,3 4,5,6 7,8,9 10,11,12 $ seq 12|ruby -e 'print STDIN.read.gsub(/(.*?)\n(.*?)\n(.*?)\n/){$~.to_a[1..-1].join(",")+"\n"}' 1,2,3 4,5,6 7,8,9 10,11,12 $ seq 12|ruby -pe '$_=$_.chop+"," if $.%3!=0' 1,2,3 4,5,6 7,8,9 10,11,12
ストリームをリストのように扱うのは難しいな。
perlだときれいにすむ
$ seq 12|perl -pe '$.%3&&s/\n/,/' 1,2,3 4,5,6 7,8,9 10,11,12