Bash

如何從解析的 CSV 行形成新字元串?

  • December 6, 2017

我正在使用 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 文件中的每一行形成我的新字元串?

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

將單引號放在單引號字元串中確實很乏味。在這裡,我將單引號傳遞給 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;--');

引用自:https://unix.stackexchange.com/questions/409314