AWK双分裂,试图将它保持在同一条线上

时间:2013-08-09 13:04:46

标签: bash file awk

我仍然是awk的新手,但我有一个awk命令可以执行我想做的90%。我分裂的那条线看起来像这样。

Key1^C{"s":"VALUE"}^BKEY2^C{"s":"VALUE"}^BKEY3^C{"s":"VALUE"}

我正在用这个awk命令分裂它

awk -F'\02' '{for(x=1; x<=NF; x++) {nf=split($x,f,"\03"); print f[1], "--", f[2], ","}}' inputfile > outputfile.txt

看起来像这样

Key1 -- Value,
Key2 -- Value,
Key3 -- Value,

我希望有人可以帮我指明如果有可能让它看起来像这样

Key1 -- Value, Key2 -- Value, Key3 -- Value

3 个答案:

答案 0 :(得分:2)

试试这个:(根据你的命令):

awk -F'\02' '{for(x=1; x<=NF; x++) {nf=split($x,f,"\03"); printf "%s",f[1]" -- " f[2] (x==NF?"": ",")}print ""}' inputfile > outputfile.txt

答案 1 :(得分:0)

试试这个:

awk -F'\02' '{for(x=1; x<=NF; x++) {nf=split($x,f,"\03"); tmpvar=tmpvar" "f[1], "--", f[2], ","}}END{sub(/,$/,"",tmpvar); print tmpvar}' inputfile > outputfile.txt

答案 2 :(得分:0)

awk -F'[\02\03"]' '{sep="";for(i=1;i<NF;i+=6){printf "%s%s -- %s",sep,$i,$(i+4);sep=", "}}END{print ""}' some.file

或更具可读性:

awk -F'[\02\03"]' '
    {
        sep = ""
        for (i=1; i<NF; i+=6) {
            printf "%s%s -- %s", sep, $i, $(i+4)
            sep = ", "
        }
    }
    END {print ""}
' some.file

这使用^ B和^ C以及“作为字段分隔符。我假设^ C之后的JSON片段始终同时具有键和值。