[英]Bash script for reads from csv and use it in mysql query
我需要一个 bash 脚本,它从 csv 每行读取 2 个值,并在 mysql 查询中使用它。
.csv 包含大约 +3k 行,如下所示:
FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1
FA63MZ6,200000000163,2020-06-27,CF,Name2 Surname2 Surname2
我想提取“日期”和“姓名 Surname1 Surname1”作为变量,以便在 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
理想情况下,此脚本可以使用查询结果创建 a.csv:
FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1,paid
FA63MZ6,200000000164,2020-06-27,CF,Name2 Surname2 Surname2,not_paid
提前致谢,
像这样:
{
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
\047
ascii 序列是单引号字符。
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
SELECT status FROM invoice WHERE date_created='200000000163' AND
customer_id IN (
SELECT id FROM customers WHERE name = 'Name Surname1 Surname1');
SELECT status FROM invoice WHERE date_created='200000000163' AND
customer_id IN (
SELECT id FROM customers WHERE name = 'Name2 Surname2 Surname2');
像这样的东西应该可以工作,但是未经测试:
#!/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"
需要注意的是,它仅适用于提供的格式FA63MZ6,200000000163,2020-06-27,CF,Name Surname1 Surname1
,并且不适用于 csv 的引用 forms 或包含的字段,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.