Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
gsub dans awk
Envoyé par: oudoubah

Bonjour,

J'ai un fichier de conf contenant (entre autres) les infos de partitionnement écrit de cette manière :
[disks]
/dev/sda1 1 1275 83
/dev/sda2 1276 1406 82
/dev/sda3 1407 19929 8e

Le schéma est device debut fin type

A partir de ces informations, je dois repartitionner automatiquement mon disque. Pour cela, je comptais utiliser awk:
awk '/\[disks\]/ {
...getline ;
...while ($0 !~ /^\[.*/) {
......if ($0 != "" ) {
.........debut=$1 ;
.........fin=$2 ;
.........gsub(/(\/dev\/[^0-9]*)([0-9]*)/, "\1 \2") ;
.........printf("fdisk %s <<EOM \nn\np\n%s\n%s\nw\nEOM\n", $1, $2, $debut, $fin);
.........getline
......}
...}
}' save.conf

Pour le moment, j'utilise printf pour voir ma commande, au lieu d'utiliser system.
Mon assignement des variables debut et fin n'est pas bon (avec un peu de RTFM, je devrais y arriver).

Par contre, je bloque depuis un moment sur le gsub (ou alors sur la suite, à savoir afficher le résultat).

Un petit coup de main ne serait pas de trop ;-)

Merci!

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Monday 7 August 2006 16:14:47
Répondre     Citer    
Re: gsub dans awk
Envoyé par: oudoubah

J'ai avancé avec
gsub(/(\/dev\/[^0-9]*)([0-9]*)/, "\1 \2",device)
printf("%s\n",$device)

Mais j'obtiens la ligne originale.
Quelle est mon erreur dans gsub pour qu'il ne me fasse pas la séparation:
/dev/sda 1

Quelles sont mes erreurs dans mes affectations et/ou utilisation des variables debut et fin? Pour le moment, je n'ai que du vide.

Mon code simplifié de test :
awk '/\[disks\]/ {
...getline ;
...printf("Ligne originale=%s\n",$0);
...while ($0 !~ /^\[.*/) {
......if ($0 != "" ) {
.........debut=$2 ;
.........fin=$3 ;
.........gsub(/(\/dev\/[^0-9]*)([0-9]*)/, "\1", device) ;
.........printf("fdisk %s \nDebut:%s\n",$device,$debut);
.........}
......getline
}}' save.conf

Mon résultat :
Ligne originale=/dev/sda1 1 1275 83
fdisk /dev/sda1 1 1275 83
Debut:/dev/sda1
fdisk /dev/sda2 1276 1406 82
Debut:
fdisk /dev/sda3 1407 19929 8e
Debut:



Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Monday 7 August 2006 16:43:49
Répondre     Citer    
Re: gsub dans awk
Envoyé par: oudoubah

Il ne me reste plus que le problème de sub/gsub

Comment réussir à transformer "/dev/sda1" en "/dev/sda 1" avec awk?

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 8 August 2006 08:51:48
Répondre     Citer    
Re: gsub dans awk

je n'ai jetté qu'un coup d'oeil rapide sur tes différents message, mais pour ta derniere question voila une solution :

gsub("/dev/[^0-9]","& ",device )

--
Brugmans Frédéric

[www.brugmans.net]
[triathlon.sport-challenge.be]

Poste le Tuesday 8 August 2006 09:59:18
Répondre     Citer    
Re: gsub dans awk
Envoyé par: oudoubah

Merci pour ta réponse, je vois un peu mieux comment ça fonctionne.

Au final, j'ai écris ceci :
awk '/\[disks\]/ {
...getline;
...while ($0 !~ /^\[.*/) {
......if ($0 != "" ) {
.........sub("[0-9]", " &");
.........printf("fdisk %s\nn\np\n%d\n%d\n%d\nw\nEOM\n", $1, $2, $3, $4" | "sh");
.........getline
......}
...}
}' $CONF

Je n'ai pas encore testé le pipe dans sh, mais ça devrait aller. Reste à typer les partitions, et passer à la suite!

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 8 August 2006 10:51:05
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
gsub dans awk
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons