Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

awk avec seuil numerique

2 réponses
Avatar
octane
Bonjour,

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

Le rendu est de ce genre:
Table : 'table3' (2686); index ID =3D 3, base de donn=E9es ID =3D 7
Analyse du niveau LEAF effectu=E9e.
- Pages analys=E9es................................: 1
- extensions analys=E9es...........................: 1
- extensions commut=E9es..........................: 0
- Moy des pages par extension...............: 1.0
- Densit=E9 d'analyse [meilleure valeur du compte r=E9el].......: 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=E9 de page moy (pleine)...........: 0.00%

Je souhaite avoir le nom de la table lorsque la Densit=E9 d'analyse est
inf=E9rieure =E0 90%

J'ai essay=E9 avec grep et =E7a me semble =EAtre la mauvaise piste.

J'ai essay=E9 avec awk, et =E7a semble mieux convenir, mais il me manque
quelques chose.
cat dbcc_showcontig | awk ' $1=3D=3D"Table" {table =3D $3;} $2=3D=3D"Densit=
=E9"
AND $3=3D=3D"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=E9rer le "plus petit que" avec awk

Avez vous des solutions pour tout =E7a?

Merci

2 réponses

Avatar
sdf
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



Avatar
Cyrille Lefevre
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.