Вставьте значение строковой переменной в середину значения другой строковой переменной в ksh - PullRequest
0 голосов
/ 22 октября 2018

Итак, у меня есть переменная TRAILER, которая содержит около 50 символов.Эта переменная определена ранее в моей сессии оболочки.Как вы, вероятно, можете сказать, это трейлер к файлу, который мы будем отправлять.Мне нужно вставить количество записей этого файла в трейлер.Этот счетчик записи будет иметь длину 9 цифр (если нужно, оставит нули с нулями) и будет начинаться с индекса 2 этой строки TRAILER.Я хочу сохранить все остальные символы в строке TRAILER, просто вставив значение переменной RECORD_COUNT в переменную TRAILER, начиная с индекса 2 (3-й символ)

Таким образом, переменная трейлера определяется следующим образом:

#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 ......", что будет 75 пробелами для всех белых символов, определенных переменными CONTROL_TOTAL.

Эти переменные ВСЕ определяются вначало оболочки.REcord count определено, но оставлено незаполненным, потому что мы не будем знать конкретный файл до тех пор, пока позже в его оболочке.

Позже в оболочке я знаю файл, который я хочу использовать, я получаю количество записей:

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 голосов
/ 22 октября 2018

Вы можете использовать printf для заполнения.Я использую TD в качестве фиксированных первых двух символов, вы можете изменить это так, как хотите.

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

Возможно, сейчас самое время перейти к написанию имен переменных в нижнем регистре.

...