我有一个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