Convert Columns to Rows

  • Follow


I have a very large csv file from a spreadsheet.  The first 2 columns are a
description, and the next 52 columns are a value for a week of the year
(using only 3 weeks in this example)

Is there a way in Awk to transform these into a format that is loadable into
a relational database such as Oracle?

For example, I'd like to change the following into the latter format.  The
first column would be a derived week number.  That first column is something
I could live without if I had to.

Any help with a simple awk would be appreciated.



washer,sunday,33,44,55
dryer,monday,667,333,44
refrig,monday,555,876,99



1    washer sunday 33
2    washer sunday 44
3    washer sunday 55
1    dryer monday 667
2    dryer monday 333
3    dryer monday 444
1    refrig monday 555
2    refrig monday 876
3    refrig monday 99



0
Reply Buck 11/17/2004 4:39:07 PM

In article <bebs62-3ff.ln1@turf.turgidson.com>,
Buck Turgidson <jc_va@hotmail.com> wrote:
....
Convert:
>washer,sunday,33,44,55
>dryer,monday,667,333,44
>refrig,monday,555,876,99

To:

>1    washer sunday 33
>2    washer sunday 44
>3    washer sunday 55
>1    dryer monday 667
>2    dryer monday 333
>3    dryer monday 444
>1    refrig monday 555
>2    refrig monday 876
>3    refrig monday 99

BEGIN {FS=","}
{
for (i=3; i<=NF; i++)
    print i-2,$1,$2,$i
}

0
Reply gazelle 11/17/2004 5:24:54 PM



Buck Turgidson wrote:
> I have a very large csv file from a spreadsheet.  The first 2 columns are a
> description, and the next 52 columns are a value for a week of the year
> (using only 3 weeks in this example)
> 
> Is there a way in Awk to transform these into a format that is loadable into
> a relational database such as Oracle?

Sure:

gawk -F, '{for (i=3;i<=NF;i++) print i-2, $1, $2, $i}'

	Ed.
0
Reply Ed 11/17/2004 5:25:43 PM

>
> BEGIN {FS=","}
> {
> for (i=3; i<=NF; i++)
>     print i-2,$1,$2,$i
> }
>

Just beautiful.....Thanks to both.


0
Reply Buck 11/17/2004 6:57:42 PM

3 Replies
262 Views

(page loaded in 0.127 seconds)


Reply: