【问题标题】:AWK double split, trying to keep it on the same lineAWK双拆分,试图保持在同一行
【发布时间】:2013-08-11 10:09:46
【问题描述】:

我还是 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

【问题讨论】:

    标签: bash file awk


    【解决方案1】:

    试试这个:

    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】:

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

      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
      

      【讨论】:

      • 虽然我正在阅读多行内容,但将所有信息都保存在一行中效果非常好。是否可以将每一行的所有信息都保存在自己的行中?
      • 我在末尾添加了print "",复制命令并重试@TallPaul
      • 完美!非常感谢!
      • 如果我运行你的命令@TallPaul,我无法得到你的输出(之前的多行)。我得到了 3 行,例如 key1 -- {"s":"Value"} ,
      • 是的,我需要解析它,但都在一行上,因为我正在处理从 nosql 数据库导出的文件,所以我永远不会知道将传入哪些列,因为每一行可以有不同的列并且仍然在同一个表中
      【解决方案3】:
      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 sn-ps 总是同时引用键和值。

      【讨论】:

      • 其实是也不是,它看起来像 CREATED_TS^C{"s":"2013-08-05T08:29:29.292+0000"}^B。键从未被引用,但值似乎总是
      • 我的意思是大括号内冒号左右两边的值都会被引用:"s""value"
      猜你喜欢
      • 2020-11-10
      • 2018-09-15
      • 2015-09-22
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多