将字符串变量值插入另一个字符串变量值的中间(以 ksh 为单位)



所以我有一个包含大约 50 个字符的变量 TRAILER。此变量是之前在我的 shell 会话中定义的。正如您可能知道的那样,这是我们将要发送的文件的预告片。我需要将该文件的记录计数插入到预告片中。此记录计数的长度为 9 位(如果需要,左边用零填充(,并将从该字符串 TRAILER 的索引 2 开始。我想保留 TRAILER 字符串中的所有其他字符,只需将RECORD_COUNT变量值插入从索引 2(第 3 个字符(开始的 TRAILER 变量中

所以拖车变量是这样定义的:

#Trailer details
TRAILER_RECORD_IDENTIFER="T"
LIFE_CYCLE="${LIFE_CYCLE_ENV}"
RECORD_COUNT="" #This will be calculated in the wrapper during the creation step
FILE_NUMBER="1111"
FILE_COUNT="1111"
CONTROL_TOTAL_1="               "
CONTROL_TOTAL_2="               "
CONTROL_TOTAL_3="               "
CONTROL_TOTAL_4="               "
CONTROL_TOTAL_5="               "
TRAILER="${TRAILER_RECORD_IDENTIFER}"
"${LIFE_CYCLE}"
"${RECORD_COUNT}"
"${FILE_NUMBER}"
"${FILE_COUNT}"
"${CONTROL_TOTAL_1}"
"${CONTROL_TOTAL_2}"
"${CONTROL_TOTAL_3}"
"${CONTROL_TOTAL_4}"
"${CONTROL_TOTAL_5}"

然后将拖车打印为 预告片="TD11111111..."对于CONTROL_TOTAL变量定义的所有白色字符,这将是 75 个空格。

这些变量都在 shell 的开头定义。REcord 计数已定义,但留空,因为我们直到稍后在 shell 中才会知道特定文件。

稍后在shell中我知道我想使用的文件,我得到记录表:

cat ${ADE_DATA_FL_PATH_TMP} | wc -l | read ADE_DATA_FL_PATH_TMP_REC_COUNT >> ${LOG_FILE} 2>&1

现在我想获取ADE_DATA_FL_PATH_TMP_REC_COUNT并将该值写入从第二个索引开始的 TRAILER 变量中,用零填充为 9 个字符长。因此,如果我的记录数是 2700 条记录,那么新的预告片将看起来像...... 预告片="TD00000270011111111...">

您可以使用 printf 进行填充。 我使用TD作为固定的前两个字符,您可以根据需要进行更改。

printf -v TRAILER "TD%.9d%s" "${ADE_DATA_FL_PATH_TMP_REC_COUNT}" "$(cut -c 12- <<< "${TRAILER}")" 

也许这是切换到以小写形式编写变量名称的好时机。

最新更新