用逗号分隔(AWK)将多行转换为一行

时间:2013-10-15 15:13:49

标签: awk

我有一个看起来像的文件:

LOG_FILE:

PROFILE INDEX                    10

PROFILE NAME                Profile_name1

PLMN NAME         PLMN         PLMN NAME         PLMN      
                  INDEX  ALLOWED                     INDEX  ALLOWED

Name1              2       NO        name3             3     NO        
name2              4       NO        name4             5     NO        

PROFILE INDEX                    11
PROFILE NAME                Profile_name2

PLMN NAME         PLMN         PLMN NAME         PLMN      
                  INDEX  ALLOWED                     INDEX  ALLOWED

Name5              2       NO        name3             7     NO        
name6              4       NO        name4             8     NO   

我想将其转换为CSV格式。

需要输出:

Pofile Index,Profile Name,PLMN_ Name,PLMN_INDEX,Allowed
10, Pofile_name1,   Name1,      2,  no
10, Pofile_name1,   Name3,      3,  NO
10, Pofile_name1,   Name4,      5,  NO
10, Pofile_name1,   Name2,      4,  no

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

尝试

awk -f convert.awk input.txt

其中input.txt是您的输入文件,convert.awk

BEGIN {
    OFS=", "
    print "Profile Index", "Profile Name", "PLMN_Name", "PLMN_Index", "Allowed"
}

/^PROFILE INDEX/ {
    ind=$3
    next;
}
/^PROFILE NAME/ {
    sub(/^PROFILE NAME/,"")
    name=$0
    next
}

/^PLMN NAME/ {
    getline;    getline
    d=1; next
}

d==1 {
    pname[1]=$1; pind[1]=$2; all[1]=$3;
    pname[3]=$4; pind[3]=$5; all[3]=$6;
    d++;     next
}
d==2 {
    pname[2]=$1; pind[2]=$2; all[2]=$3;
    pname[4]=$4; pind[4]=$5; all[4]=$6;
    for (i=1; i<=4; i++) {
        print ind, name, pname[i], pind[i], all[i]
    }
    d=0;      next
}

答案 1 :(得分:0)

您可以尝试这样使用:

awk -vRS="" -vOFS=',' '$1=$1' file