将字符串变量值插入ksh

时间:2018-10-22 18:39:55

标签: bash unix ksh

所以我有一个变量TRAILER,其中包含约50个字符。这个变量是在我的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}"

然后将TRAILER打印为     TRAILER =“ TD11111111 ......”,这将是CONTROL_TOTAL变量定义的所有白色字符的75个空格。

这些变量ALL在外壳的开头定义。记录数已定义,但是留空,因为直到以后再启动外壳,我们才知道特定文件。

以后在外壳中我知道我要使用的文件,我得到了记录库:

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条记录,那么新的预告片将看起来像...     TRAILER =“ TD00000270011111111 ......”

1 个答案:

答案 0 :(得分:0)

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

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

也许这是切换成小写形式的好时机。