Bash 塞德给了我很多问题

Bash 塞德给了我很多问题,bash,sed,Bash,Sed,我正在编写一个非常基本的脚本: 1从文本文件keyList.txt获取帐户密钥->密钥格式如下所示:100200022210020000400 2对于我循环使用的每个键,使用SED将它们插入到另一个文本文件中的SQL查询中 3查询示例: UPSERT INTO ACCT_HIST (ACCT_KEY) SELECT ACCT_KEY FROM ACCT_HIST WHERE ACCT_KEY IN (101000033333) AND REC_ACTV_IND = 'Y' AND DT_KEY

我正在编写一个非常基本的脚本:

1从文本文件keyList.txt获取帐户密钥->密钥格式如下所示:100200022210020000400

2对于我循环使用的每个键,使用SED将它们插入到另一个文本文件中的SQL查询中

3查询示例:

UPSERT INTO ACCT_HIST (ACCT_KEY) SELECT ACCT_KEY 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

请注意,您有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避免它,我认为您正在为第一个键编写一个输出文件,然后用另一个输出文件替换第二个键的输出。您的目标是有两个输出文件吗?或者一个输出文件,每个键都有一个查询的副本?不要全局设置IFS IFS=,读取f1 f2,也不要使用for循环来迭代该文件;请参阅。如果有三个字段,则变量f2将是字段2,字段3。您可以使用printf field1、field2、field3来尝试它\n |而IFS=,read-r f1;do echo${f1}${f2};完成;如果不需要编辑分隔符,实际上可以使用单个变量,如whilereadline;做一部分;完成