用于从csv读取的Bash脚本,并在mysql查询中使用它
我需要一个bash脚本,每行读取CSV2值,并在mysql查询中使用它 .csv包含大约+3k行,如下所示:用于从csv读取的Bash脚本,并在mysql查询中使用它,mysql,bash,csv,Mysql,Bash,Csv,我需要一个bash脚本,每行读取CSV2值,并在mysql查询中使用它 .csv包含大约+3k行,如下所示: FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1 FA63MZ6,200000000163,2020-06-27,CF,Name2 Surname2 Surname2 我想提取“date”和“Name-names1-names1”作为变量,以便在mysql查询中使用它 我正在玩: echo "select s
FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1
FA63MZ6,200000000163,2020-06-27,CF,Name2 Surname2 Surname2
我想提取“date”和“Name-names1-names1”作为变量,以便在mysql查询中使用它
我正在玩:
echo "select status from invoices where date_created= \"${date01}\" and customer_id in (select id from customers where name = \"${name01}\" );" | mysql -u user -pPassword -D dbname | grep -v status
理想情况下,此脚本可以创建带有查询结果的.csv:
FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1,paid
FA63MZ6,200000000164,2020-06-27,CF,Name2 Surname2 Surname2,not_paid
提前感谢,类似的功能应该可以使用,但未经测试:
#!/bin/bash
while read -r LINE; do
DATE=$(awk -F, '{print $3}' <<< "${LINE}")
NAME=$(awk -F, '{print $5}' <<< "${LINE}")
RES=$(echo "select status from invoices where date_created= \"${DATE}\" and customer_id in (select id from customers where name = \"${NAME}\" );" | mysql -u user -pPassword -D dbname | grep -v status)
echo "$LINE, $RES"
done < "csv_file.csv"
#/bin/bash
而read-r行;做
DATE=$(awk-F,{print$3}'类似的东西应该可以工作,但是未经测试:
#!/bin/bash
while read -r LINE; do
DATE=$(awk -F, '{print $3}' <<< "${LINE}")
NAME=$(awk -F, '{print $5}' <<< "${LINE}")
RES=$(echo "select status from invoices where date_created= \"${DATE}\" and customer_id in (select id from customers where name = \"${NAME}\" );" | mysql -u user -pPassword -D dbname | grep -v status)
echo "$LINE, $RES"
done < "csv_file.csv"
!/bin/bash
当读取-r行时;执行
日期=$(awk-F,{print$3}'如下所示:
{
while IFS=, read -r f1 f2 f3 f4 f5; do
printf "SELECT status FROM invoice WHERE date_created=\047$f2\047 AND
customer_id IN (
SELECT id FROM customers WHERE name = \047$f5\047);"
echo
done < Input_File.csv
} | mysql --skip-column-names -u user -pPassword -D dbname
输出
像这样:
{
while IFS=, read -r f1 f2 f3 f4 f5; do
printf "SELECT status FROM invoice WHERE date_created=\047$f2\047 AND
customer_id IN (
SELECT id FROM customers WHERE name = \047$f5\047);"
echo
done < Input_File.csv
} | mysql --skip-column-names -u user -pPassword -D dbname
输出
如果LINE
是一个数组,${LINE}
是它的第一个元素。如果希望read
以逗号分隔,请适当设置IFS
。Cat(tm)的使用也是无用的。我想从带有默认IFS(换行符、制表符、空格)的文件中读取整行内容,使用awk提取查询参数并将其放回原处。我真的不明白您真正的意思,也不明白所提供的格式可以提供哪些数组fa63mz620000000001632020-06-27,CF,Name-names1-names1
thanking@user1452962,脚本返回:“face63mz620000000001632020-06-27,CF,Maycol”,何时必须返回:“Face63MZ620000000001632020-06-27,CF,Maycol Adolfo Test,paid”。我的意思是$NAME只有一个名称。如果你不想read
将行拆分成一个数组,为什么要使用-a
呢?好的,这是关键,我已经从while中删除了-a,现在似乎可以工作了。如果line
是一个数组,${line}
是它的第一个元素。如果你想read
以逗号分隔,请适当地设置IFS
。Cat(tm)的使用也是无用的。我想从带有默认IFS(换行符、制表符、空格)的文件中读取整行内容,提取用awk查询的参数并将其放回原处。我真的不明白您真正的意思,也不明白从提供的格式中可以得到什么数组FA63MZ620000000001632020-06-27,CF,Name-names1-names1
Thank@user1452962,脚本返回:“Face63MZ620000000001632020-06-27,CF,Maycol,“何时必须返回:”Face63MZ620000000001632020-06-27,CF,Maycol Adolfo测试,付费"。我的意思是$NAME只有一个名称。如果你不想read
将行分割成一个数组,为什么要使用-a
呢?好的,这是关键,我已经从while中删除了-a,现在似乎可以用了。我会使用mysql--跳过列名
而不是最后的grepNow,fa63mz620000000001632020-06-27,CF,NAME在哪里姓氏1姓氏1,付费
output?:)馈送到MySQLSTDIN
。如果删除“| MySQL………..”,您将看到脚本的输出在my中添加了输出answer@GillesQuenot您的代码可以工作,但不会以csv格式输出付费
或未付费
:(非常感谢!!!我会使用mysql——跳过列名
而不是最后的grepNow,fa63mz620000000001632020-06-27,CF,Name-names1-names1,paid
output?:)反馈到MySQLSTDIN
。如果删除“|MySQL………..”,您将看到脚本的输出在my中添加了输出answer@GillesQuenot您的代码可以正常工作,但不会以csv格式输出,paid
或not_paid
:(非常感谢!!!