awk avec seuil numerique

Le
octane
Bonjour,

je dois traiter le rendu d'un dbcc showcontig SQL.

Le rendu est de ce genre:
Table : 'table3' (2686); index ID = 3, base de données ID = 7
Analyse du niveau LEAF effectuée.
- Pages analysées..: 1
- extensions analysées: 1
- extensions commutées..: 0
- Moy des pages par extension: 1.0
- Densité d'analyse [meilleure valeur du compte réel].: 100.00%
[1:1]
- Fragmentation d'analyse logique..: 0.00%
- Fragmentation d'analyse d'extension..: 0.00%
- Moy octets libres par page: 8094.0
- Densité de page moy (pleine)..: 0.00%

Je souhaite avoir le nom de la table lorsque la Densité d'analyse est
inférieure à 90%

J'ai essayé avec grep et ça me semble être la mauvaise piste.

J'ai essayé avec awk, et ça semble mieux convenir, mais il me manque
quelques chose.
cat dbcc_showcontig | awk ' $1=="Table" {table = $3;} $2=="Densit=
é"
AND $3=="d'analyse" AND $9<90% { print table; }'

Mais:
-je ne sais pas si awk accepte "AND"
-je ne sais pas si je compte bien les champs
-je ne sais pas comment accepter l'apostrophe de "d'analyse"
-je ne sais pas comment gérer le "plus petit que" avec awk

Avez vous des solutions pour tout ça?

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
sdf
Le #756306
tu peux faire un truc du genre :

grep -E "^Table|^- Densité d'analyse" ton_fichier|sed -e "$!N;s/n//" -e
"s/./ /g"|awk '{if ($23<€){print $3}}'


en entree d'awk, le sed te ramene :
Table : 'table1' (2686); index ID = 3, base de données ID = 7- Densité
d'analyse [meilleure valeur du compte réel] : 60 00%

Bonjour,

je dois traiter le rendu d'un dbcc showcontig SQL.

Le rendu est de ce genre:
Table : 'table3' (2686); index ID = 3, base de données ID = 7
Analyse du niveau LEAF effectuée.
- Pages analysées................................: 1
- extensions analysées...........................: 1
- extensions commutées..........................: 0
- Moy des pages par extension...............: 1.0
- Densité d'analyse [meilleure valeur du compte réel].......: 100.00%
[1:1]
- Fragmentation d'analyse logique..: 0.00%
- Fragmentation d'analyse d'extension..: 0.00%
- Moy octets libres par page.....................: 8094.0
- Densité de page moy (pleine)...........: 0.00%

Je souhaite avoir le nom de la table lorsque la Densité d'analyse est
inférieure à 90%

J'ai essayé avec grep et ça me semble être la mauvaise piste.

J'ai essayé avec awk, et ça semble mieux convenir, mais il me manque
quelques chose.
cat dbcc_showcontig | awk ' $1=="Table" {table = $3;} $2=="Densité"
AND $3=="d'analyse" AND $9<90% { print table; }'

Mais:
-je ne sais pas si awk accepte "AND"
-je ne sais pas si je compte bien les champs
-je ne sais pas comment accepter l'apostrophe de "d'analyse"
-je ne sais pas comment gérer le "plus petit que" avec awk

Avez vous des solutions pour tout ça?

Merci



Cyrille Lefevre
Le #756305
J'ai essayé avec awk, et ça semble mieux convenir, mais il me manque
quelques chose.
cat dbcc_showcontig | awk ' $1=="Table" {table = $3;} $2=="Densité"
AND $3=="d'analyse" AND $9<90% { print table; }'


tu n'étais pas loin...

Mais:
-je ne sais pas si awk accepte "AND"


=> &&

-je ne sais pas si je compte bien les champs


on compte bien à partir de 1
$0 => toute la ligne
une alternative est $NF pour le dernier champ, $(NF - 1) pour
l'avant dernier, etc.

-je ne sais pas comment accepter l'apostrophe de "d'analyse"


n'en met pas :) ou bien utilise ~ /d.analyse/ au lieu de == /.../

-je ne sais pas comment gérer le "plus petit que" avec awk


le pb est surtout le % qu'il faut virer, sinon, comparaison
de type chaine au lieu de numerique

Avez vous des solutions pour tout ça?


LANG=C awk '
$1 == "Table" { table = $3 }
$2 ~ /Densit/ && $3 ~ /analyse/ {
sub("%", "", $NF)
if ($NF < 90)
print table
}'

PS : le LANG=C devant awk, c'est pour être sur que le séparateur
de flottant est bien '.' et non ',' (comme en francais si LANG
vaut qqc comme fr_FR, etc.)

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.

Publicité
Poster une réponse
Anonyme