Comparer deux tableaux avec des for imbriqués, dur dur..
Bonjour,
je tombe sur un os et ne sais pas comment le ronger...
J'ai besoin de récupérer les données de proc/partitions toutes les secondes et ça, je sais faire, mais c'est pour les comparer que je coince.
J'ai vu/lu plein de tutos, de posts, etc., et je me plante lamentablement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| IFS='\n'
listenow=$(cat /proc/partitions | grep sd)
listeprv="$listenow"
declare -a newdevice
for lignen in $listenow; do
for lignep in $listeprv; do
outnow=$(echo $lignen | awk '{print $4}');
echo $outnow
outprv=$(echo $lignep | awk '{print $4}');
echo $outprv
if [ "$outprv" != "$outnow" ]; then echo "outnow = " ; echo "$outnow"; newdevice+=("$outnow"); fi
done
done |
Je n'ai pas tout mis, juste ce qui coince. Et voilà ce que j'obtiens :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sda
sda1
sda2
sdb
sdb1
sdb2
sdc
sdc1
sdc2
sdd
sdd1
<espace rajouté par moi pour séparer *ici* la sortie outnow de la sortie outprv
sda
sda1
sda2
sdb
sdb1
sdb2
sdc
sdc1
sdc2
outnow = |
Donc en gros je ne peux pas comparer les lignes de l'array listenow avec les lignes de l'array listeprv.
Je m'attendais à avoir
Code:
1 2 3 4 5 6 7 8 9
| sda #venant de listenow
sda #venant de listeprv
sda1 #id.
sda1 #id.
#etc., jusqu'à
sdc2
sdc2
sdd
sdd1 |
C'est ces 2 dernières lignes qui m'intéressent (insertion d'une clé usb) et y a pas moyen.
J'ai même tenté de rajouter des echo pour voir où ça foire, comme ça :
Code:
1 2 3 4
| for lignen in ${listenow[@]}; do
echo $lignen
for lignep in ${listeprv[@]}; do
echo $lignep |
mais ça ne m'avance à rien, voilà la sortie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 8 0 234431064 sda
8 1 204800000 sda1
8 2 29627488 sda2
8 16 1953514584 sdb
8 17 1748713472 sdb1
8 18 204800000 sdb2
8 32 1953514584 sdc
8 33 1748713472 sdc1
8 34 204800000 sdc2
8 48 30310400 sdd
8 49 30310160 sdd1
# dessus la listenow, dessous la listeprv, comme si les boucles n'étaient pas imbriquées, :koi:
8 0 234431064 sda
8 1 204800000 sda1
8 2 29627488 sda2
8 16 1953514584 sdb
8 17 1748713472 sdb1
8 18 204800000 sdb2
8 32 1953514584 sdc
8 33 1748713472 sdc1
8 34 204800000 sdc2 |
J'ai raté une marche ?
Merci,