разделенная строка, разделенная строка, выбранная с использованием SQL - PullRequest
0 голосов
/ 01 мая 2019

Мой сценарий оболочки выполняет SQL для извлечения данных в следующем формате:

JOB_ID_001|[PROD] This is a mail subject one ${application_date}|a@example.com,b@example.com
JOB_ID_002|[PROD] This is a mail subject two ${application_date}|c@example.com,b@example.com

Я хочу разбить эту строку, разделенную на трубы, но вывод выглядит очень странно, как показано ниже:

JOB_ID_001[0]
JOB_ID_001[1]
JOB_ID_001[2]
This[0]
This[1]
This[2]
is[0]
is[1]
is[2]
a[0]
a[1]
a[2]
mail[0]
mail[1]
mail[2]
subject[0]
subject[1]
subject[2]
one[0]
one[1]
one[2]
${application_date}[0]
${application_date}[1]
${application_date}[2]
example.com,b@example.com[0]
example.com,b@example.com[1]
example.com,b@example.com[2]
JOB_ID_002[0]
JOB_ID_002[1]
JOB_ID_002[2]
This[0]
This[1]
This[2]
is[0]
is[1]
is[2]
a[0]
a[1]
a[2]
mail[0]
mail[1]
mail[2]
subject[0]
subject[1]
subject[2]
two[0]
two[1]
two[2]
${application_date}[0]
${application_date}[1]
${application_date}[2]
ple.com,b@example.com[0]
ple.com,b@example.com[1]
ple.com,b@example.com[2]

Мой желаемый вывод:

JOB_ID_001
[PROD] This is a mail subject one ${application_date}
a@example.com,b@example.com
JOB_ID_002
[PROD] This is a mail subject two ${application_date}
c@example.com,b@example.com

Чтобы я мог продолжить работу с этими строками.

Мой сценарий оболочки выглядит следующим образом:

email_configs=(`sqlplus -silent $DB_CONN <<-EOF
    whenever sqlerror exit 1 oserror exit oscode
    set heading off feedback off echo off verify off pagesize 0
    $sql_subject_of_mail;
    exit;
    EOF`)

for i in "${!email_configs[@]}"
do
    email_config=${email_configs[i]}

    IFS='|' read -r -a email_config_array <<< "$email_config"

    job_id=$email_config_array[0]
    subject_of_mail=$email_config_array[1]
    to_mail_id=$email_config_array[2]

    echo $job_id
    echo $subject_of_mail
    echo $to_mail_id

done

Я проверил некоторые альтернативные решения со этой страницы, но в выходной части $ {application_date} отсутствует или есть какая-то другая проблема.

Может кто-нибудь иметь представление о моей ошибке?

1 Ответ

0 голосов
/ 01 мая 2019

Массив $email_configs настроен неправильно. В качестве разделителей массива используются пробелы, а не переводы строк.

Вместо того, чтобы устанавливать массив, прочитайте вывод sqlplus в цикле.

while IFS='|' read -r job_id subject_of_mail to_mail_id
do
    echo "$job_id"
    echo "$subject_of_mail"
    echo "$to_mail_id"
done < <(sqlplus -silent $DB_CONN <<-EOF
    whenever sqlerror exit 1 oserror exit oscode
    set heading off feedback off echo off verify off pagesize 0
    $sql_subject_of_mail;
    exit;
    EOF 
)
...