2013-05-14 147 views
1

我試圖生成CSV數據MySQL的文件轉換CSV文件到MySQL INSERT語句

90927744|1356976814398|0|1356976815339|18563182571|18563182571|18568753009|18563574221 

是有,我可以用awk或sed將產生MySQL的INSERT語句如下

方式
insert into table (id,value,status,starttime,endtime,number,phone,number) values (90927744,1356976814398,0,1356976815339,18563182571,18563182571,18568753009,18563574221); 

謝謝

+0

'as'''你可以分別獲得所有的字段。然後你需要將'第一個字段'與'id','第二個字段'與'值'相關聯,等等...... – Bill 2013-05-14 04:17:35

+0

我試圖捕獲該文件並將其管理爲awk以添加「插入語法」,然後()之間的值,但我偶然發現了正確的語法 – Deano 2013-05-14 04:20:13

+0

我已經添加了一個例子的答案...希望它有幫助 – Bill 2013-05-14 04:32:45

回答

2

要從輸入提取特定領域....

$echo "90927744|1356976814398|0|1356976815339|18563182571|18563182571|18568753009|18563574221" | awk -F "|" '{print $4}' 
1356976815339 

如果你有a.txt一行(參見下面的輸入文件多行腳本)

$cat a.txt | awk -F "|" '{print $4}' 

所以要輸出的查詢,你want--

$cat a.txt | awk -F "|" '{printf("insert into table (id,value,status,starttime,endtime,number,phone,number) values (%d, %d, %d, %d, %d, %d, %d, %d) \n", $1, $2, $3, $4, $5, $6, $7, $8)}' 

如果你的文件有多條線路,然後用下面的腳本(或改編此您的需要)

while read line   
do   
    echo "$line" | awk -F "|" ........ 
done < a.txt 
+0

我會建議使用綁定值而不是明確定義值。插入這樣的行。參見[this related SO topic]中關於'bind values'的主題(http://stackoverflow.com/questions/9587743/bind-values-insert-into-mysql-perl)。 – TrueY 2013-05-14 07:31:24

0

這可能會爲你工作(GNU SED):

sql="insert into table (id,value,status,starttime,endtime,number,phone,number) values" 
sed 'y/|/,/;s/.*/'"$sql"' (&);/' file 
1

只是爲了改進上面寫的AWK聲明,而不是while循環,我們可以使用

awk -F "|" '{printf("insert into table (id,value,status,starttime,endtime,number,phone,number) values (%d, %d, %d, %d, %d, %d, %d, %d) \n", $1, $2, $3, $4, $5, $6, $7, $8)}' a.txt >> result.txt 

我希望這個使用`awk`用`字段分隔工作