Code Comments
Programming Forum and web based access to our favorite programming groups.[cross-post comp.lang.awk, comp.unix.shell] I have a file whose record delimiters seem to be "Directions" and "More" (i.e., I need the data between each, however they need to be joined and comma-delimited. Kind of the inverse of csv parser. For example, given: More Info | Map | Directions Milford Pharmacy & Wellness Center 931 State Rte 28 Ste 205 Milford, OH 45150-1990 (513) 831-8211 More Info | Map | Directions Alexandria Discount Drugs 7857 Alexandria Pike Alxndra, KY 41001-1045 (859) 635-2171 More Info | Map | Directions should return "Milford Pharmacy & Wellness Center","931 State Rte 28 Ste 205","Milford","OH",45150-1990","(513) 831-8211" "Alexandria Discount Drugs","7857 Alexandria Pike","Alxndra","KY","41001-1045","(859) 635-2171" Note--There are quotes around the city, state, and zip to create discreet fields.
Post Follow-up to this message["Followup-To:" header set to comp.unix.shell.]
On 2008-03-29, sandy_eggo <cpmadrid@gmail.com> wrote:
>
>
> [cross-post comp.lang.awk, comp.unix.shell]
>
> I have a file whose record delimiters seem to be "Directions" and
> "More" (i.e., I need the data between each, however they need to be
> joined and comma-delimited. Kind of the inverse of csv parser.
>
> For example, given:
>
> More Info | Map | Directions
>
> Milford Pharmacy & Wellness Center
> 931 State Rte 28 Ste 205
> Milford, OH 45150-1990
> (513) 831-8211
>
> More Info | Map | Directions
>
> Alexandria Discount Drugs
> 7857 Alexandria Pike
> Alxndra, KY 41001-1045
> (859) 635-2171
>
> More Info | Map | Directions
>
> should return
>
> "Milford Pharmacy & Wellness Center","931 State Rte 28 Ste
> 205","Milford","OH",45150-1990","(513) 831-8211"
> "Alexandria Discount Drugs","7857 Alexandria
> Pike","Alxndra","KY","41001-1045","(859) 635-2171"
>
> Note--There are quotes around the city, state, and zip to create
> discreet fields.
You could use a blank line as the record separator and discard records
beginning with "More Info".
awk -F\\n 'BEGIN{RS="";OFS="\",\""}
/^More Info/{next}
{$0="\"" $0 "\""; sub(/,/,"",$3);gsub(/ /,OFS,$3)}
{print}'
Post Follow-up to this message
On 3/28/2008 7:04 PM, sandy_eggo wrote:
> [cross-post comp.lang.awk, comp.unix.shell]
>
> I have a file whose record delimiters seem to be "Directions" and
> "More" (i.e., I need the data between each, however they need to be
> joined and comma-delimited. Kind of the inverse of csv parser.
>
> For example, given:
>
> More Info | Map | Directions
>
> Milford Pharmacy & Wellness Center
> 931 State Rte 28 Ste 205
> Milford, OH 45150-1990
> (513) 831-8211
>
> More Info | Map | Directions
>
> Alexandria Discount Drugs
> 7857 Alexandria Pike
> Alxndra, KY 41001-1045
> (859) 635-2171
>
> More Info | Map | Directions
>
> should return
>
> "Milford Pharmacy & Wellness Center","931 State Rte 28 Ste
> 205","Milford","OH",45150-1990","(513) 831-8211"
> "Alexandria Discount Drugs","7857 Alexandria
> Pike","Alxndra","KY","41001-1045","(859) 635-2171"
>
> Note--There are quotes around the city, state, and zip to create
> discreet fields.
awk -v RS= -F'\n' -v OFS='","' '!/^More/{gsub(/[, ]+/,OFS,$3);print "\""$0"\
""}'
file
Ed.
Post Follow-up to this messagePowered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.