2017-07-15 15 views
-1

テキストファイル:取得する方法フィールド

$ 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"を使う考えはありません。

答えて

1

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 

ここでも解決策の1つ以外の形を追加してください。

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 
0

溶液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)からを捕捉します属性値
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 
関連する問題