SED给我问题

问题描述 投票:0回答:1

我正在做一个非常基本的脚本(我是菜鸟),它执行以下操作:

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。如前所述,只有第二个键被发送到查询文件,而不是两个都发送。任何提示都适用。

bash sed
1个回答
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

无论如何,我无法弄清楚您的周期:它似乎只是对您的文件进行了简单的复制。您可以通过cp acct_transfer_soft_del_list.csv keyList_$now.txt

来避免
© www.soinside.com 2019 - 2024. All rights reserved.