如何从解析的 CSV 行形成新字符串?

如何从解析的 CSV 行形成新字符串?

我正在使用 bash shell。我有一个 CSV 文件,其中每一行的标记都用逗号分隔。我想取出第二列和第三列并从中形成新的字符串(一条 SQL 语句)。我想我可以使用 awk 来达到这个目的,所以我尝试了......

localhost:mydir davea$ awk -F ',' -v OFS=',' "REPLACE INTO my_table (ID, NAME, HOURS) VALUES ('$2', '$2', '$3');" types.csv
awk: syntax error at source line 1
 context is
    REPLACE INTO my_table >>>  (ID, <<<
awk: bailing out at source line 1

但正如你所看到的,我收到了一个错误。我遗漏了什么吗?如何从 CSV 文件中的每一行形成新字符串?

答案1

awk -F ',' '{
    printf("REPLACE INTO my_table (ID, NAME, HOURS) VALUES ('\''%s'\'', '\''%s'\'', '\''%s'\'');\n", $2, $2, $3) 
}' types.csv

答案2

将单引号放在单引号字符串中确实很乏味。在这里,我将一个单引号传递给 awk 变量“q”。我也在努力照顾SQL注入

awk -F ',' -v q="'" '
    {
        for (i=1; i<=NF; i++) gsub(q, q q, $i)
        print "REPLACE INTO my_table (ID, NAME, HOURS) VALUES (" q $1 q "," q $2 q "," q $3 q");"
    }
' <<END
foo,bar,Robert');DROP TABLE students;--
END
REPLACE INTO my_table (ID, NAME, HOURS) VALUES ('foo','bar','Robert'');DROP TABLE students;--');

答案3

可能不是最有效的解决方案,但应该有效:

awk  -F, '{print "REPLACE INTO my_table (ID, NAME, HOURS) VALUES (\x27"$2"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' types.csv

相关内容