I have input file which is given below
Input file
10,9:11/61432568509
118,1:/20130810014023
46,440:4/GTEL
10,9:11/61432568509
118,1:/20130810014023
46,44
if each of your "data block" has 3 lines, you could do:
sed -n 'N;N;s/\n/,/g;p' file
if you love awk:
awk 'NR%3{printf "%s,",$0;next}7' file
A short awk
version
awk 'ORS=NR%3?",":RS' file
Shortened, thanks to iiSaymour
One way with awk:
$ awk -v RS= -F'\n' 'BEGIN{OFS=","}{for (i=1;i<=NF; i=i+3) {print $i,$(i+1),$(i+2)}}' file
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
It defines each field to be a line. Hence, it prints them on blocks of three.
> sed 'N;N;s/\n/,/g' your_file
With pr
:
$ pr -ats, file --columns 3
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
With args
and tr
:
$ xargs -n3 < file | tr ' ' ,
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
Using awk
:
$ awk 'ORS=(NR%3==0)?"\n":","' inputfile
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
EDIT: As commented by sudo_O and Ed Morton, the following variant is more portable:
$ awk 'ORS=(NR%3?",":RS)' inputfile
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL