所以我有一个变量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 ......”
答案 0 :(得分:0)
您可以使用printf进行填充。
我将TD
用作固定的前两个字符,您可以根据需要更改此方式。
printf -v TRAILER "TD%.9d%s" "${ADE_DATA_FL_PATH_TMP_REC_COUNT}" "$(cut -c 12- <<< "${TRAILER}")"
也许这是切换成小写形式的好时机。