我正在研究一个非常基本的脚本(我是菜鸟),该脚本可以执行以下操作:
1)从文本文件(keyList.txt)抓取帐户密钥->密钥格式如下: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保存查询,但是我不想永久更改它们,因此我将输出发送到querys_ $ now.txt。如前所述,只有第二个键被发送到查询文件,而不是两个都发送。任何提示均应适用。
答案 0 :(得分:0)
请注意,您有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