AWK は変数に値を設定します。

AWK は変数に値を設定します。

値を含むいくつかのフィールドを含むファイルがあり、csvこれらの値の組み合わせを印刷したいです(最終的にsqlスクリプトになります)。

AWKを使ってみましたが、結果はありません。

私のファイルの一部csv


ATTR_A,2,,
ATTR_B,2,,
ATTR_C,2.5

単一の文字列で属性(列属性以上)のすべての値を印刷したいと思います。

私の最終結果は次のとおりです。

a属性の値は2、b属性の値は2、c属性の値は2.5です。

これにより、次のようにSQLスクリプトに簡単に変換できます。

 INSERT INTO `db`.`table` (`attribute_a`, `attribute_b`, `attribute_c`) VALUES ('2', '2', '2.5');

私は次のスクリプトを試しました。


BEGIN {FS=",";}
{

if($1 ~ "ATTR_A")
    $va=$2;

if($1 ~ "ATTR_B")
    $vb=$2;
}

END { print $va $vb}
  

しかし、最後の行だけが印刷されます。私は何が間違っていましたか?

ベストアンサー1

awk -F'[,_]' '{ attrs[$2]=$3; };
END{ printf "INSERT INTO db.table (";
     for(attr in attrs) { printf ("%s\047attribute_%s\047", sep, attr); sep=", "; };
     printf ") VALUES ("; sep="";
     for(attr in attrs) { printf ("%s\047%s\047", sep, attrs[attr]); sep=", "; };
    print ")";
}' infile
INSERT INTO db.table ('attribute_A', 'attribute_B', 'attribute_C') VALUES ('2', '2', '2.5')

おすすめ記事