2012-04-30 6 views
1

Мне нужно, чтобы последние 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

ответ

3

Это не будет работать:

oldFile= `printf "%020d" ${RET_VAL}` 

Удалить место после =

+0

Это работает, но теперь я получаю 00000000000000000000.1 – David

+2

Ну, это неудивительно, учитывая, что для mat – Hubro

+0

Что не так с форматированием? Я все еще новичок с bash, поэтому, пожалуйста, извините меня – David