如何拆分 - awk

时间:2015-11-14 14:17:20

标签: awk

我想知道是否可以在用'='分割之后使列表中的字符或右字符生成,最后每个字符也会被另一个'|'拆分和','。我尝试但失败了因为列表的数量没有修复。即使是C16也可以显示,输入中它将是16项。

你能给我一些提示吗?

输入

C1=34,C2=35,C3="99"

输出

C1|C2|C3#34,35,"99"

3 个答案:

答案 0 :(得分:2)

使用-F时,您可以将多个字符作为分隔符传递。该命令可能如下所示:

awk -F'[,=]' '{printf "%s|%s|%s#%s,%s,%s", $1,$3,$5,$2,$4,$6}' input.txt

我使用,=作为分隔符。这样可以轻松访问各个值并使用printf重新组合它们。

如果列数未知,则需要循环列。首先是作为名称的奇数列,然后是作为值的偶数列。我建议把它放到一个脚本中:

test.awk

BEGIN {
    FS="[,=]"
} 
{
    for(i=1;i<=NF;i+=2){
        if(i>=NF-1){
            fmt="%s"
        }else{
            fmt="%s|"
        }
        printf fmt,$i
    }   
    printf "#" 
    for(i=2;i<=NF;i+=2){
        if(i>=NF-1){
            fmt="%s"
        }else{
            fmt="%s,"
        }
        printf fmt,$i
    }   
}

然后执行它:

awk -f test.awk input.txt

答案 1 :(得分:2)

awk -F'[=,]' '
{
    for (i=1;i<=NF;i+=2) {
        printf "%s%s", $i, (i<(NF-1)?"|":"#")
    }
    for (i=2;i<=NF;i+=2) {
        printf "%s%s", $i, (i<NF?",":ORS)
    }
}
' file
C1|C2|C3#34,35,"99"

答案 2 :(得分:0)

 awk '{sub(/C1=34,C2=35,C3="99"/,"C1|C2|C3#34,35,\"99\"")}1' file 
    C1|C2|C3#34,35,"99"