使用我的awk脚本从CSV文件中恢复信息

时间:2019-06-27 08:10:29

标签: linux bash csv awk

我有这个CSV文件:

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

我创建了一个小脚本,可让我从csv中恢复信息 并像这样放置它们:

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

我的脚本是:

#!/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

但是结果是:

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

或者我想要:

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

您能告诉我为什么我的脚本不起作用以及为什么不考虑浮点数吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

将标签和换行符添加到与Cyrus发布的相同的awk中。

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

更通用的解决方案:

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

更具可读性:

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