how to convert Fixed length file to delimited file.

I have below fixed lenth file . I have to convert this to delimitted file.

File1.txt

E116005/29/19930E001E000
E12201/23/19940E001E003
E10406/4/19940E001E003

I want to convert this to :

E116,0,05/29/1993,0,E001,E000
E122,0,1/23/1994,0,E001,E003
E104,0,6/4/1994,0,E001,E003

I have a sample code ,below iam passing the ending position of each cloumn from other record.
Date is 3rd column,Iam considering date as '10 char' length & ending position to be '15'.So if
i have a date as '5/9/1993' we have to append '0' to date and month so that it will be '05/09/1993'

sed -e 's/./&,/4' 's/./&,/5' 's/./&,/15' 's/./&,/16' 's/./&,/20' 's/./&,/24'  File1.txt > delimited.csv

I need help .....please help me !!

One way:

awk -F"/" ' {
s1=substr($1, 1, 4) "," substr($1, 5, 1) "," substr($1, 6)
s2=substr($3, 1, 4) "," substr($3, 5, 1) "," substr($3, 6, 4) "," substr($3, 10)
print s1 "/" $2 "/" s2}
'  File1.txt > delimited.csv

Regards

Thanx Franklin.

why my code is not working ????? Can u please tell me .....

sed -e 's/./&,/4' 's/./&,/5' 's/./&,/15' 's/./&,/16' 's/./&,/20' 's/./&,/24' File1.txt > delimited.csv

where File1 is :

E116005/29/19930E001E000
E122001/23/19940E001E003
E104006/04/19940E001E003

With gawk you can do :

awk -v FIELDWIDTHS='4 1 10 1 4 4' -v OFS=',' '{ $1=$1 ""; print }' inputfile

Jean-Pierre.

It is not working ......
Can you please check & give exact code . ......

Iam new to unix .....

The code works fine with gawk only :

$ cat gd.dat
E116005/29/19930E001E000
E122001/23/19940E001E003
E104006/04/19940E001E003
$ gawk -v FIELDWIDTHS='4 1 10 1 4 4' -v OFS=',' '{ $1=$1 ""; print }' gd.dat
E116,0,05/29/1993,0,E001,E000
E122,0,01/23/1994,0,E001,E003
E104,0,06/04/1994,0,E001,E003
$

With standard awk you can do :

$ cat gd.dat
E116005/29/19930E001E000
E122001/23/19940E001E003
E104006/04/19940E001E003
$ cat gd.sh
awk -v FIELDWIDTHS='4 1 10 1 4 4' -v OFS=',' '
   BEGIN {
      WidthsCount = split(FIELDWIDTHS, Widths);
   }
   {
      fixe = $0;
      pos  = 1;
      for (i=1; i<=WidthsCount; i++) {
         len = Widths;
         $i = substr(fixe, pos, len);
         pos += len;
      }
      print;
   }
    ' gd.dat
$ gd.sh
E116,0,05/29/1993,0,E001,E000
E122,0,01/23/1994,0,E001,E003
E104,0,06/04/1994,0,E001,E003
$

Jean-Pierre.

Try this one.

sed -e 's/./&,/4' -e 's/./&,/6' -e 's/./&,/17' -e 's/./&,/19' -e 's/./&,/24' File1.txt > delimited.csv
sed 's/\(....\)\(.\)\(.*\/....\)\(.\)\(....\)\(....\)/\1,\2,\3,\4,\5,\6/' filename