用于从csv读取的Bash脚本,并在mysql查询中使用它

用于从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

我需要一个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 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?:)馈送到MySQL
STDIN
。如果删除“| MySQL………..”,您将看到脚本的输出在my中添加了输出answer@GillesQuenot您的代码可以工作,但不会以csv格式输出
付费
未付费
:(非常感谢!!!我会使用
mysql——跳过列名
而不是最后的grepNow,
fa63mz620000000001632020-06-27,CF,Name-names1-names1,paid
output?:)反馈到MySQL
STDIN
。如果删除“|MySQL………..”,您将看到脚本的输出在my中添加了输出answer@GillesQuenot您的代码可以正常工作,但不会以csv格式输出,
paid
not_paid
:(非常感谢!!!