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')

答案2

awk -F "," 'ORS=","{gsub(/.*_/,"",$1);print "The value of attribute "$1" is "$2}' filename| sed "s/,$//g"

输出

The value of attribute A is 2,The value of attribute B is 2,The value of attribute C is 2.5

相关内容