Shell, bash afficher la valeur manquante
glardz
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
glardz Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
glardz Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
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 .
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 .
A voir également:
- Shell, bash afficher la valeur manquante
- Classic shell - Télécharger - Personnalisation
- Afficher appdata - Guide
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. ✓ - Forum Excel
- Afficher taille dossier windows - Guide
- Bingo bash - Télécharger - Divers Jeux
Une autre solution y est donnée aussi ;-\
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é .