Shell, bash afficher la valeur manquante

Fermé
glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016 - Modifié par glardz le 16/06/2016 à 09:35
glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016 - 17 juin 2016 à 09:48
Bonjour,


j'ai un fichier log.txt avec

bpc19;BC02;SLOT05
bpc20;BC02;SLOT06
bpc21;BC02;SLOT07
bpc22;BC02;SLOT08
bpc23;BC02;SLOT09
bpc24;BC02;SLOT10
bpc26;BC02;SLOT12
bpc27;BC02;SLOT13
bpc28;BC02;SLOT14
bdbm;BC01;SLOT00
bpc19;BC02;SLOT05
bpc20;BC02;SLOT06
bpc21;BC02;SLOT07
bpc24;BC02;SLOT10
bpc26;BC02;SLOT12
bpc27;BC02;SLOT13
bpc28;BC02;SLOT14
bdbm;BC01;SLOT00

et je veux récupéré les slot manquant 0,1,2,3,4,8,9,11 le code en bash est :

previous_slot=0
previous_blade_center_number=0

while read line
do
slot_number=$(echo "$line" | cut -d';' -f17 | cut -d'T' -f2)
slot_number=$slot_number | bc #take slot number as for example 01
slot_number=${slot_number##0} #take slot number in int

blade_center_number=$(echo "$line" | cut -d";" -f2 | cut -d"c" -f2 | bc) # take only blade center number as example 122

blade_center_name=$(echo "$line" | cut -d';' -f2) #take only blade center name as example b3pc122

blade_center_number_plus_one=$((previous_blade_center_number + 1)) #previous blade center plus one

# echo "$blade_center_name $blade_center_number $slot_number"

slot_plus_one=$((previous_slot + 1)) #previous slot plus one

if [ $slot_plus_one -eq 1 ] # if slot plus one = 1 then we do slot_plus_one=$slot_number because, the previous slot first value is 0 .
then
slot_plus_one=$slot_number
fi

if [ $slot_plus_one -eq 15 ] # at a time slot_plus_one=15 because the last slot is 14 so i take the next slot value and put in slot_plus_one .
then
slot_plus_one=$slot_number
fi

if [ $slot_number -eq $slot_plus_one ] # if $slot_number = $slot_plus_one, slot not missing
then

echo "ok"


else
while [ $slot_number -ne $slot_plus_one ]
do

echo "slot_number=$slot_number"

slot_number=$((slot_number + 1))

echo "slot number -1 =$slot_number"
previous_slot=$previous_slot slot_number-1 missing =$slot_number"
done
fi

previous_slot=$slot_number
previous_blade_center_number=$blade_center_number

done < $1

merci pour vos réponses .

1 réponse

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
16 juin 2016 à 10:21
0
glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016
16 juin 2016 à 10:51
par contre je voudrai sans le commande sed .
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016
16 juin 2016 à 11:58
Salut,

Une autre solution y est donnée aussi ;-\
0
glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016
16 juin 2016 à 14:07
à vrai dire je voudrai une solution avec le script que j'ai mit ci-dessus ;) .
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016
16 juin 2016 à 14:49
Et quel est le problème avec le script ci-dessus ?
0
glardz Messages postés 26 Date d'inscription mardi 24 mai 2016 Statut Membre Dernière intervention 17 juillet 2016
Modifié par glardz le 16/06/2016 à 15:16
c'est au niveau de la fin du else, j'ai la valeur du slot suivant :

exemple :

slot suivant =12 et slot précédent égal à 10 .

je veux faire 12-10 =2
10+(2-1)=11

12-11=1
11+(2-1)

12-12=0

et la boucle s'arrête, je sais pas si j'ai bien expliqué .
0