For Programmers: Free Programming Magazines  


Home > Archive > AWK > November 2004 > Convert Columns to Rows









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Convert Columns to Rows
Buck Turgidson

2004-11-17, 3:56 pm

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 w of the year
(using only 3 ws 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 w 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



Kenny McCormack

2004-11-17, 3:56 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
}

Ed Morton

2004-11-17, 3:56 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 w of the year
> (using only 3 ws 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.
Buck Turgidson

2004-11-17, 3:56 pm

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


Just beautiful.....Thanks to both.


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com