【问题标题】:How to get the fields from intricacy file如何从复杂文件中获取字段
【发布时间】:2017-12-20 05:40:04
【问题描述】:

文本文件:

$ cat filename.txt 
2017-07-15 00:00:27,000 NAME: THT TYPE: S {"cp":"R3"} 
2017-07-15 00:00:27,301 NAME: THT TYPE: S {"cp":"R3"} 
2017-07-15 00:00:26,993 NAME: THT TYPE: M {"bl":"t","cp":"R1","scp":"T5"}.

我试过的命令行:

$ cat filename.txt |awk '{print $1,$2,$4,$6,$7}'
2017-07-15 00:00:27,000 THT S {"cp":"R3"}
2017-07-15 00:00:27,301 THT S {"cp":"R3"}
2017-07-15 00:00:26,993 THT M {"bl":"t","cp":"R1","scp":"T5"}

想要的输出:

017-07-15 00,THT,S,R3 
017-07-15 00,THT,S,R3 
017-07-15 00,THT,M,R1

我认为我们可以使用“IF”,但我不知道在 AWK 中使用“IF”。

【问题讨论】:

    标签: linux parsing awk


    【解决方案1】:
    $ awk -v OFS=',' '{match($NF,/"cp":"[^"]+/); print substr($0,2,12), $4, $6, substr($NF,RSTART+6,RLENGTH-6)}' file
    017-07-15 00,THT,S,R3
    017-07-15 00,THT,S,R3
    017-07-15 00,THT,M,R1
    

    【讨论】:

      【解决方案2】:

      gawk 解决方案:

      awk '{ $7=gensub(/.*"cp":"([^"]+)".*/,"\\1","g",$7); 
             print substr($1,2)" "substr($2,1,2),$4,$6,$7  }' OFS=',' filename.txt
      

      输出:

      017-07-15 00,THT,S,R3
      017-07-15 00,THT,S,R3
      017-07-15 00,THT,M,R1
      

      • $7=gensub(/.*"cp":"([^"]+)".*/,"\\1","g",$7) - 捕获"cp" 属性值

      【讨论】:

        【解决方案3】:

        考虑到您的 Input_file 与此处显示的示例相同。如果是,请尝试关注 awk,如果这对您有帮助,请告诉我。

        awk -F'[ :{"]' 'NF>18{print substr($1,2),$2 s1 $7 s1 $10 s1 $21;next} {print substr($1,2),$2 s1 $7 s1 $10 s1 $16}' s1=","   Input_file
        

        在这里也添加非单线形式的解决方案。

        awk -F'[ :{"]' 'NF>18{
                            print substr($1,2),$2 s1 $7 s1 $10 s1 $21;
                            next
                         }
                         {
                            print substr($1,2),$2 s1 $7 s1 $10 s1 $16
                         }
                   ' s1=","  Input_file
        

        【讨论】:

          猜你喜欢
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多