我有一个包含4列的.csv文件。我在将第一列输入表格时遇到问题。这是脚本:
#!/bin/bash
_csvfile="/logstash/Mysql-Data.csv"
#Create the tables if they dont exists
mysql -u user -ppassword logstash << eof
CREATE TABLE IF NOT EXISTS \`elkDevIndexAssoc\` (
cenDevSID varchar(255),
cenDevFQDN varchar(255),
cenDevIP varchar(255),
cenDevServiceName varchar(255)
)
eof
#Format the csv, replace ";" with ","
sed -i -e 's/;/,/g' $_csvfile
#sed -i -e 's/^/,/g' $_csvfile
IFS=,
while read column1 column2 column3 column4
do
echo "INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('$column1', '$column2', '$column3', '$column4');"
done < Mysql-Data.csv | mysql --user='user' --password='password' -D logstash;
如果我回显每个列变量,输出看起来很好,例如$ column1 - 4.像这样:
123213 serverfqdn 127.0.0.1 mysql
但是当我尝试将其导入mysql时,缺少第一列,如下所示:
mysql> select * from elkDevIndexAssoc;
+-----------+------------------------------------------------+---------------- -+--------------------+
| column1 | column2 | column3 | column4 |
+-----------+------------------------------------------------+---------------- -+--------------------+
|column1 | column2 | column3 | column4
| | serverfqdn | 127.0.0.1 | mysql
我不明白当我将它导入mysql时第一列是如何丢失的,但是当我单独回显每个变量时却不知道?
编辑:我的.csv文件格式如下:
S123123,serverfqdn,127.0.0.1,service
S123123,serverfqdn,127.0.0.1,service
S123123,serverfqdn,127.0.0.1,service
S123123,serverfqdn,127.0.0.1,service
答案 0 :(得分:0)
你的mysql命令应该在你的循环中:
while read column1 column2 column3 column4; do
echo "INSERT INTO ..." | mysql --user='user' --password='password' -D logstash;
done < Mysql-Data.csv
OT:你不需要用分号来终止echo string中的mysql命令。
答案 1 :(得分:0)
好的,这样就可以了(在当地测试):
IFS=,
while read column1 column2 column3 column4; do
echo "INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('$column1', '$column2', '$column3', '$column4')"
done < <(sed 's/;/,/g' < Mysql-Data.csv)
sed
不会修改您的csv文件,但您的循环会从中读取。在我的例子中,循环输入来自done
后面。注意IFS=,
它会对你脚本的其余部分产生影响,所以最好将它限制在sed
命令(以某种方式)。
上面的脚本将您的数据扩展为:
INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('S123123', 'serverfqdn', '127.0.0.1', 'service')
INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('S123123', 'serverfqdn', '127.0.0.1', 'service')
INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('S123123', 'serverfqdn', '127.0.0.1', 'service')
INSERT INTO elkDevIndexAssoc (cenDevSID,cenDevFQDN,cenDevIP,cenDevServiceName) VALUES ('S123123', 'serverfqdn', '127.0.0.1', 'service')
将循环内部echo命令的输出传递给你的mysql:
while ...
echo "..." | mysql -u... -p...
done ...
在验证之前不要忘记截断您的表格,这样您就不会评估旧的(错误的)数据。 ;)