Skip to content
Advertisement

Recover informations from CSV files with my awk script

I have this CSV files :

Monday,linux,6,0.2
Tuesday,linux,0.25,0.2
Wednesday,linux,64,3

I create a little script that allow me to recover the informations from my csv and to place them like this :

Day : Monday
OS : Linux
RAM : 6
CPU1 : 0.2

My script is :

#!/bin/bash

awk -F'[ ,;|.]' 'FNR==0{next}
               FNR>1 {
                        print "DAY : " $1;
                        print "OS :n " $2
                        print "RAM :n " $3
                        print "CPU1 :n " $4
                     }' mycsvfile.csv

But the result is :

DAY : Tuesday
OS :
 linux
RAM :
 0
CPU1 :
 25
DAY : Wednesday
OS :
 linux
RAM :
 64
CPU1

Or I want :

DAY : Monday
OS : linux
RAM : 0.2
CPU 1 : 1

DAY : Tuesday
OS : linux
RAM : 0.25
CPU 1 : 0.2

DAY : Wednesday
OS : linux
RAM : 64
CPU 1 : 3

Can you tell me why my script doesn’t works and why floats are not taken into account ?

Thank you !

Advertisement

Answer

Added tab and newline to same awk as Cyrus posted.

awk -F ',' '{
    print "DAY :",$1
    print "OS :",$2
    print "RAM :",$3
    print "CPU1 :",$4"n"
}' OFS='t' file

DAY :   Monday
OS :    linux
RAM :   6
CPU1 :  0.2

DAY :   Tuesday
OS :    linux
RAM :   0.25
CPU1 :  0.2

DAY :   Wednesday
OS :    linux
RAM :   64
CPU1 :  3

A more generic solution:

awk -F, 'BEGIN {split("DAY OS RAM CPU", header, " ")}{for (i=1;i<=4;i++) print header[i]":t",$i;print ""}' t
DAY:     Monday
OS:      linux
RAM:     6
CPU:     0.2

DAY:     Tuesday
OS:      linux
RAM:     0.25
CPU:     0.2

DAY:     Wednesday
OS:      linux
RAM:     64
CPU:     3

More readable:

awk -F, '
    BEGIN {split("DAY OS RAM CPU", header, " ")}
    {
    for (i=1;i<=4;i++)
        print header[i]":t",$i;
    print ""
    }' file
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement