САС дает мне проблемы - PullRequest
       13

САС дает мне проблемы

0 голосов
/ 08 ноября 2019

Я работаю над действительно базовым сценарием (я нуб), который выполняет следующее:

1) Извлекает ключи учетных записей из текстового файла (keyList.txt) -> формат ключа выглядит следующим образомthis: 1002000222,1002000400

2) Для каждого ключа, который я перебираю и вставляю (используя SED) в SQL-запросы, содержащиеся в другом текстовом файле.

3) Пример запроса:

UPSERT INTO ACCT_HIST (ACCT_KEY,CLS_TYP_KEY,DT_KEY,PRD_TYP_KEY,FEE_IND,LIAB_IND,CCY_CD,JOB_SEQ,UV_AMT)SELECT ACCT_KEY,CLS_TYP_KEY,current_date(),CREATED_TMSTP,LST_UPD_TMSTP,LST_UPD_BY,'ACCT TRANSFER DEACTIVATION',DELETE_FLAG,'N'FROM ACCT_HIST WHERE ACCT_KEY IN (101000033333) AND REC_ACTV_IND = 'Y' AND DT_KEY < 20191009;

Ниже приведен мой фрагмент кода Bash, но для краткого изложения проблемы SED заменяет значения в круглых скобках по одному ключу за раз, а не помещает ихоба в том же месте скобок. Ниже теперь работает отлично.

#!/bin/bash

now=$(date +"%Y%m%d-%H:%M")

cp acct_transfer_soft_del_list.csv keyList_$now.txt

for key in $(<keyList_$now.txt)
do
        sed "s/([^)]*)/(${key})/3" hbase.txt >> queries_$now.txt
done

hbase.txt содержит запросы, но я не хочу их постоянно изменять, поэтому я отправляю вывод в query_ $ now.txt. Как уже упоминалось, в файл запроса отправляется только второй ключ, а не оба. Любые советы являются соответствующими.

1 Ответ

0 голосов
/ 08 ноября 2019

Обратите внимание, что у вас есть IFS=,.

Это (вероятно) нарушение вашего ключа из-за нежелательного поведения.

Я признаю, что не уверен, что полностью понял, что вынужно, но я думаю, что вы можете использовать первый цикл, чтобы получить все, что вам нужно.

Повторно используя ваш код, вы можете сделать что-то вроде этого:

#!/bin/bash

now=$(date +"%Y%m%d-%H:%M")

IFS=","
while read f1 f2
do
  echo "$f1,$f2"
  sed "s/([^\)]*)/($f1,$f2)/3 " hbase.txt >> queries_$now.txt
done < acct_transfer_soft_del_list.csv > keyList_$now.txt

В любом случае, я могу 'Выясните свой цикл while: кажется, это простая копия вашего файла. Вы можете избежать этого с cp acct_transfer_soft_del_list.csv keyList_$now.txt

...