# [AWK] Tester une variable interne à awk (resolu)

## dapsaille

Bonsoir ...

 Je souhaiterais faire quelque chose de la forme suivante =

Source = texte valeur 

traitement à effectuer = avoir en sortie texte valeur si valeur est supérieure à 90 (des fs en l'occurence)

 hors je sèche ...

```

cat source | awk '{ if ($2 > 90) print $1,$2}'

```

 Je ne comprend pas j'ai pourtant de la doc quiquivasbien (TM) mais j'ai le cerveau en compote si quelqu'un aurais un tuyau je suis preneur (je suis perdu au niveau de la syntaxe de awk principalement).

EDIT =HAHAHAHAHA en fait j'ai corrigé une type dans mon post .. j'ai retenté et cela fonctionne :p

 merci à tous   :Wink: 

non je ne chapotte pas de la casserolleLast edited by dapsaille on Wed Feb 06, 2008 5:26 pm; edited 1 time in total

----------

## geekounet

Heu, donc c'est résolu en fait ? N'oublie pas le titre dans ce cas là  :Wink: 

Et vire ce cat inutile, awk peut prendre un fichier en paramètre  :Wink: 

----------

## Bapt

Et un chaton en moins

sinon pour ta question : 

```
awk '{ if ($2 > 90) {print $1,$2}}' source
```

----------

## loopx

c'est RESOLU alors   :Cool: 

----------

## dapsaille

 *Bapt wrote:*   

> Et un chaton en moins
> 
> sinon pour ta question : 
> 
> ```
> ...

 

+1 pour les chatons je modifie cela .. dans ma ligne j'ai au moins 8 pipes ... ca fait une portée complète cela ..

 NOTA= ca faisait 2 heures au moins que j'était la dessus j'était mort de rire de me corriger et que cela fonctionne ... 

c'est le Gentoo Spirit probablement :p

----------

## Bapt

 *dapsaille wrote:*   

> +1 pour les chatons je modifie cela .. dans ma ligne j'ai au moins 8 pipes ... ca fait une portée complète cela.

 

Donne ta ligne, on pourra peut être t'aider à sauver des chatons tout en restant lisible...

----------

## dapsaille

```

do rsh $i df |grep .snapshot | awk '{print $5,$1}' | awk -F"%" '{print $1,$2}' | sort -nr | awk '{ if ($1 > 100) print $2,$1}' > /tmp/snaps_stats/snaps_$i

```

 mon dieu quelle horreur en le relisant .. mais bon c'est fonctionnel ^^

----------

## Bapt

 *dapsaille wrote:*   

> 
> 
> ```
> 
> do rsh $i df |grep .snapshot | awk '{print $5,$1}' | awk -F"%" '{print $1,$2}' | sort -nr | awk '{ if ($1 > 100) print $2,$1}' > /tmp/snaps_stats/snaps_$i
> ...

 

```
 do rsh $i df | awk '{ if ( /.snapshot/ ) { sub("%",""); if($5 > 100) {print $1,$5 }}}' | sort -nrk 2 > /tmp/snaps_stats/snaps_$i 
```

Vite fait, peut certainement être amélioré, c'est lisible et ça sauve déjà pas mal de chaton  :Smile:  Je pense que c'est aussi plus compréhensible (un petit commentaire du genre $5: pourcentage utilisé $1 device sub=substitution. Alors que dans le premier pour s'y retrouvé sur qui fait quoi c'est plus compliqué.

Le sort doit aussi pouvoir être mis dans la awk, mais la je ne connais pas.

----------

## truc

 *Bapt wrote:*   

> 
> 
> ```
>  do rsh $i df | awk '{ if ( /.snapshot/ ) { sub("%",""); if($5 > 100) {print $1,$5 }}}' | sort -nrk 2 > /tmp/snaps_stats/snaps_$i 
> ```
> ...

 

on peut faire ça pour raccourcir un tout petit peu le bouzin:

```
awk '/.snaphot/{blabla}'
```

On peut effectivement faire le sort dans le awk via un pipe, mais c'est pas specialement plus lisible, à moins que tu voulais parler des fonctions internes de awk (style sort et asort?), si c'est le cas, je ne pense pas que ça soit une bonne idée, car, l'ordonnancement (ça doit se dire comme ça...) se faire sur un champ de chaque ligne et qu'il faudrait bidouiller avec les arrays ce qui ne promet vraiment pas d'être ni plus simple ni plus rapide...

EDIT: ça serait sympa d'avoir un exemple de ligne en entrée en sortie aussi, car là comme ça, sans se casser la tête c'est dur à imaginer...  :Smile: 

----------

## dapsaille

Gné ... y'as du boulot pour comprendre vos modifs mais je vais regarder cela :p

 Pour infos en entrée on as cela sortie du rsh = 

/vol/data87/.snapshot  262144000   16728344  245415656       6%  /vol/data87/.snapshot

/vol/data69/.snapshot  308700772  410662496          0     133%  /vol/data69/.snapshot

/vol/data61/.snapshot  262144000   71864692  190279308      27%  /vol/data61/.snapshot

/vol/data53/.snapshot  286051532  313011192          0     109%  /vol/data53/.snapshot

----------

## truc

```
awk '/\.snapshot/{ sub("%", "", $5); if ($5 > 100) print $1, $5}' | sort -rn -k 2
```

fin sauf faute de frappe ça devrait le faire

----------

## dapsaille

 *truc wrote:*   

> 
> 
> ```
> awk '/\.snapshot/{ sub("%", "", $5); if ($5 > 100) print $1, $5}' | sort -rn -k 2
> ```
> ...

 

 Pinaise .. je testerais cela dès que je pourrais re-gentooiser .... CF = https://forums.gentoo.org/viewtopic-t-658550.html

----------

## geekounet

Que de chatons sauvés, je suis ravi  :Very Happy: 

----------

## Bapt

@truc J'avais laissé le if, car je trouvais ça plus lisibile pour quelqu'un qui débute en awk, mais en fait c'est très lisible sans le if

Sinon j'avais pas fait gaffe au \. dans la REGEX ...

----------

## truc

 *Bapt wrote:*   

> Sinon j'avais pas fait gaffe au \. dans la REGEX ...

 

En même temps il ne nous avait si c'était un '.' ou un caractère qu'il "matchait" jusqu'a ce qu'il nous montre ses lignes initiales. donc voila! honte à lui!:p

----------

