2017-07-17 4 views
1

と一致した場合、私は、ファイル内の行印刷複数のフィールドの複数のパターンが

0,category=a,type=b,value=1 
1,category=c,type=b,.....,original_value=0 
2,category=b,type=c,....,original_value=1,....,corrected_value=3 

以下のようにコンマ区切りファイル( (2)のみ「original_value」 (1)のみ「値」を含むことができる持っています3)元の値と修正済みの値の両方

値は任意の列に指定できます。

私が書いた次のawkコマンドは、パターンマッチ後に1つのフィールドしか印刷できません。

cat file | awk -F, 'BEGIN{OFS=","} /value/ { for (x=1;x<=NF;x++) if ($x~"value") {print $2,$3,$(x)} }' | sort -u 

電流出力:2つのパターンが発生し一致した場合、私はラインの二つのフィールド(列)を印刷するにはどうすればよい

category=a,type=b,value=1 
category=b,type=c,corrected_value=3 
category=b,type=c,original_value=1 
category=c,type=b,original_value=0 

?この場合、original_valueとcorrected_valueの両方が存在する場合

予想される出力

category=a,type=b,value=1 
category=b,type=c,original_value=1,corrected_value=3 
category=c,type=b,original_value=0 

バッシュバージョン:4.3.11

答えて

2

あなたはこのawkのコマンドを使用することができます:@ anubhavaの答えに

awk 'BEGIN{FS=OFS=","} {printf "%s%s%s", $2,OFS,$3; for(i=4; i<=NF; i++) 
    if ($i ~ /value/) printf "%s%s", OFS,$i; print ""}' file 

category=a,type=b,value=1 
category=c,type=b,original_value=0 
category=b,type=c,original_value=1,corrected_value=3 
2

類似しますが、依存していません特定の列にあるカテゴリまたはタイプの列:

awk -F, ' 
    BEGIN { pattern = "^(category|type|value|original_value|corrected_value)" } 
    { 
     sep = "" 
     for (i=1; i<=NF; i++) { 
      if ($i ~ pattern) { 
       printf "%s%s", sep, $i 
       sep = "," 
      } 
     } 
     print "" 
    } 
' file