Recherche sur le Shell un cut qui coupe mal?
bonjour,
voici un script qui me pose bien des soucis
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#!/bin/ksh
#***************************************************************************
#* Parametres *
#***************************************************************************
#Variable :
NOW=`date +"%Y%m%d%H%M%S"`
#Arborescence serveur :
DIR=${HOME}/utils/Eric/ExtraireNOEMIE
DIR_LOG=${DIR}/log
DIR_RES=${DIR}/res
DIR_TMP=${DIR}/tmp
FIC_LOG=${DIR_LOG}/type00$NOW.log
FIC_ligne=${DIR_TMP}/lignefic$NOW.txt
# Element d'information Les structures NOEMIE d'identification
# Norme NOEMIE -- ENTITE ---000.
type_000() {
# echo $log
# echo "000"
# NOE_TYE=`echo "${ligne}" | awk '{print substr( $0 , 4 , 2) }'`
echo " extraction ENTITE ---000 == " >> ${FIC_LOG}
NOE_TYE=`echo "${ligne}" | cut -c 4-5`
NOE_NUE=`echo "${ligne}" | cut -c 6-19`
numemet=`echo "$ligne" | cut -c 6-19`
NOE_NUE_000=`echo "${ligne}" | awk '{print substr( $0 , 6 , 14) }'`
echo " en type 000 "
echo "NOE_NUE:" ${NOE_NUE}
echo "numemet:" ${numemet}
echo "NOE_NUE_000:" ${NOE_NUE_000}
}
#***************************************************************************
#* Traitement *
#***************************************************************************
echo "Debut du script : " `date +"%d/%m/%Y %H:%M:%S"` > ${FIC_LOG}
echo " " >> ${FIC_LOG}
# Verification de la presence du parametre de lancement
if [ $# -ne 1 ];
then
echo " TEST000.ksh ==> Erreur : Veuillez entrer le nom du fichier a analyser suivie du nom du fichier physique" >> $log
echo " TEST000.ksh == " >> $log
echo " TEST000.ksh ==> Fin extraction_NOEMIE " >> $log
echo " TEST000.ksh == " >> $log
exit 9
fi
# Acquisition du parametre
FIC_IN=$1
echo "TEST000"
#Extraction des données du fichier logique
while read ligne
do
NOE_TYP=`echo "${ligne}" | cut -c 1-3`
NOE_NIV=`echo "${ligne}" | cut -c 4-5`
case $NOE_TYP in
000 )
echo "Directe dans le cast"
echo "${ligne}"
NOE_NUE=`echo "${ligne}" | cut -c 6-19`
echo "NOE_NUE:" ${NOE_NUE}
type_000;;
esac
done < $FIC_IN |
Et voici le fichier "text" a analyser
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
000CP 01886600 ZU 8dd00294 QD014021401255689 000NU 000
01001456544d@
000XC 01909000 ZU0000008cc00294 QRN01402140136688 000NU 000
01001456544d@
000CP 01909000 ZU 8ee00294 QPN01402140146687 000NU 000
01001456544d@
000XC 01909000 ZU0000008ff00294 QDN01402140156689 000NU 000
01001456544d@
000CP 01909000 ZU0000008dd00294 QRN01402140116688 000NU 000
01001456544d@
000XC 01909000 ZU0000008ee00294 QNN01402140116687 000NU 000
01001456544d@ |
et donc on lancer nommer type000.ksh
avec comme paramètre le nom du fichier text
Pourquoi
le code
Code:
1 2 3 4
|
echo "NOE_NUE:" ${NOE_NUE}
echo "numemet:" ${numemet}
echo "NOE_NUE_000:" ${NOE_NUE_000} |
renvoi t'il comme valeur " 01886600" et non " 01886600" .
ou son donc passer les 6 caractères blanc en début de cette zone?
pourquoi y a t'il troncature de 5 caractères blanc pour les 6 présents.
LEs autres zones qui suivent sont aussi troncquer? why ? Help.
Recherche sur le Shell un cut qui coupe mal?
Si je poursuite la méthode.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| local Z_NUMEMET_C1=`echo "${NOE_NUE}" | cut -c 1-1`
Z_NUMEMET=`echo "${NOE_NUE}" | cut -c 7-14`
FICsqlSENT=/HOME/DEDALIOS/RESENTE.sql
if [ "$Z_NUMEMET_C1" -eq "0" ]; then
Z_NUM_EMETTEUR=${NOE_NUE}
else
Z_NUMEMET=`echo "${NOE_NUE}" | cut -c 7-14`
eval Z_NUM_EMETTEUR=${les_zero}${Z_NUMEMET}
echo "Z_NUM_EMETTEUR:${Z_NUM_EMETTEUR}"
echo "Z_NUMEMET:${Z_NUMEMET}"
fi
echo " select * from Table-Z Logique_C " >> ${FICsqlSENT}
echo " where " >> ${FICsqlSENT}
echo " NUM_EMETTEUR = '${Z_NUM_EMETTEUR}' ">> ${FICsqlSENT} |
j'ai constater que dans le fichier résultant j’obtiens si la zone d'origine est " 02114001"
ce la me donne
Code:
1 2
| select * from Table-Z Logique_C
where NUM_EMETTEUR = ' 02114001' |
alors que je cherche a obtenir
Code:
1 2
| select * from Table-Z Logique_C
where NUM_EMETTEUR = '00000002114001' |
quelle est l'erreur ?