Мне нужно, чтобы последние 3 символа сказали 002 и уменьшили его на 1 001. У меня в настоящее время есть проблема, благодаря которой он преобразует его в int. Итак, 001 становится 1. То, что я пытаюсь сделать, это использовать printf и преобразовать его обратно в 001. Однако это, похоже, не работает для меня. У меня есть следующие:Zero Padding Bash/Shell
set -x
substring()
{
VAR=$1
OFFSET=$2
LENGTH=$3
RET_VAL=${VAR:$OFFSET:$LENGTH}
}
# $1 filename
# Change to PF Gazetteer directory
cd $CARRIER_PF_UPDATES_DIR
LOG=log.txt
DownloadedFile=$1
OldFile=
DATE=$(date +"%Y-%m-%d-%H:%M:%S")
RET=0
if [ "${2+1}" == "1" ]
then
echo "Date: " $DATE > $LOG
echo "filename: " $DownloadedFile >> $LOG
fi
substring ${DownloadedFile} -3 3
extension=$RET_VAL
old_ext=$((${extension}+1))
substring ${DownloadedFile} 0 9
echo $RET_VAL
oldFile="${RET_VAL}${old_ext}"
oldFile= `printf "%020d" ${RET_VAL}`
oldFile="${oldFile}.${old_ext}"
#printf '%03d\n' 1
echo $oldFile
# move any temporary files if they exist
mv "${DownloadedFile}~" ${DownloadedFile}
# check to see if we got a file
result=$(grep 226 run.ilog)
if [ "${2+1}" == "1" ]
then
echo "grep found: " $result >> $LOG
fi
if [ -e "${DownloadedFile}" ]
then
#add back onto filename
#store back onto var = $OldFile
#Check if OldFile exist
#Cat files together and - Cat oldFile DownloadedFile > tempFile
echo ""
fi
if [ "$result" == "" ]
then
# File not found
RET=100
else
RET=10
# START F4202
sorted=$(sort -t'+' -k7 ${fileName} > ${fileName}.sorted)
if [ -e "${fileName}.sorted" ]
then
mv "${fileName}" "unsorted/${fileName}.unsorted"
mv "${fileName}.sorted" ${fileName}
fi
# END F4202
fi
if [ "${2+1}" == "1" ]
then
echo "script ret: " $RET >> $LOG
fi
Чтобы увидеть выход нажмите на ссылку Ideone я, кажется, получают 1.1 вместо 1.1, когда я должен получать 001
Это работает, но теперь я получаю 00000000000000000000.1 – David
Ну, это неудивительно, учитывая, что для mat – Hubro
Что не так с форматированием? Я все еще новичок с bash, поэтому, пожалуйста, извините меня – David