2015-06-10 31 views
1

我正在使用下面的查詢插入數據從csv到shell腳本中的MySQL。我需要刪除第一行,即插入時的標題名稱沒有提及他們的名字如何刪除第一行,而使用shell腳本插入csv到mysql

for _csv_file in ${_csv_files[@]} 
do 
export IFS="," 
cat $_csv_file | while read a b c d e f g h i j k l m n o p q r s t u v; do mysql -u $_db_user -p$_db_password $_db << eof 
INSERT INTO \`csv_temp_table\` 
(\`ProductType\`,\`ProductTypea\`,\`ProductTypeb\`, 
\`ProductTypec\`,\`ProductTyped\`,\`ProductTypee\`, 
\`ProductTypef\`,\`ProductTypge\`,\`ProductTypeh\`, 
\`ProductTypeh\`,\`ProductTypej\`,\`ProductTypke\`, 
\`ProductTypel\`,\`ProductTypem\`,\`ProductTypen\`, 
\`ProductTypeo\`,\`ProductTyppe\`,\`ProductTypeq\`, 
\`ProductTyper\`,\`ProductTypes\`,\`ProductTypet\`, 
\`ProductTypeu\`) VALUES ('$a','$b','$c','$d','$e','$f','$g','$h','$i', 
'$j','$k','$l','$m','$n','$o','$p','$q','$r','$s','$t','$u','$v',); 
eof 
done 
done 
exit; 

請幫我完成那個,謝謝。

+1

用'tail -n +2 $ _csv_file'替換'cat $ _csv_file'? – anishsane

+0

@anishsane非常感謝你! –

+0

請注意,引用您的變量:'$ _csv_file' - >'「$ _csv_file」','$ {_ csv_files [@]}' - >'「$ {_ csv_files [@]}」等 – anishsane

回答

2

您還可以使用LOAD DATA命令,它爲您提供了相當有趣的選擇讀不同的CSV風格到數據庫中。所以你不需要特殊的腳本來達到這個目的。這絕對值得一看!您的要求手冊頁的

部分:

的IGNORE可以用來忽略在文件開始的線行數選項。例如,您可以使用IGNORE 1 LINES跳過包含列名稱的初始標題行:

+0

我會+ 1這個。自定義的bash腳本可能會在某些特定情況下中斷。這些專用工具通常會針對這些角落案例進行測試。 – anishsane

0

這是我必須做的

for _csv_file in ${_csv_files[@]} 
do 
export IFS="," 
tail -n +2 $_csv_file| while read a b c d e f g h i j k l m n o p q r s t u v; do mysql -u $_db_user -p$_db_password $_db << eof 
INSERT INTO \`csv_temp_table\` 
(\`ProductType\`,\`ProductTypea\`,\`ProductTypeb\`, 
\`ProductTypec\`,\`ProductTyped\`,\`ProductTypee\`, 
\`ProductTypef\`,\`ProductTypge\`,\`ProductTypeh\`, 
\`ProductTypeh\`,\`ProductTypej\`,\`ProductTypke\`, 
\`ProductTypel\`,\`ProductTypem\`,\`ProductTypen\`, 
\`ProductTypeo\`,\`ProductTyppe\`,\`ProductTypeq\`, 
\`ProductTyper\`,\`ProductTypes\`,\`ProductTypet\`, 
\`ProductTypeu\`) 
VALUES('$a','$b','$c','$d','$e','$f','$g','$h','$i','$j','$k','$l','$m','$n','$o','$p','$q','$r','$s','$t','$u','$v',); 
eof 
done 
done 
exit;