# AWK traiter le retour d'une page web

**URL:** <https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661 "2016-02-21T03:11:48Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/1 "2016-02-21T03:11:48Z")

</div>

Bonjour,

J’ai une page Web qui me retourne une série de paramètres :

```auto

```

Dans un script bash je voudrais extraire les données puis les traiter.

Un début de code :

`
toto=`w3m -dump http://ip/test.php`
echo $toto | awk -F"DATE = " '{print $2}'`

Résultat : 20110824 TIME = 12592034

Le problème est que j’obtiens aussi le reste de la chaine. Est-il possible de mettre un séparateur de fin dans awk ?  
Pour uniquement extraire le résultat que l’on veux ?

Merci

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/2 "2016-02-21T03:11:49Z")

</div>

J’ai une solution avec sed :

`champ='DATE'
DATE=$(w3m -dump http://ip/test.php | sed 's/^.*'$champ' = \([^]\+\)\( .*\)\?$/\1/')`

Alors l’expression va remplacer :  
[ul]  
[li]Ce qui commence par n’importe quoi ou rien : ^.\* (^ = commencer, . = n’importe quel caractère, \* = un nombre de fois quelconque (y compris 0 fois)[/li]  
[li]suivie du champ choisi : $champ[/li]  
[li]suivi de " = " (un égale suivi et précédé d’un espace)[/li]  
[li]suivi de n’importe quel caractère sauf espace autant de fois que voulu une fois ou plus : [^]+ ([^] = tout caractère autre que l’espace, + au moins une fois)[/li]  
[li]suivi d’un espace puis n’importe quoi : " .\*"[/li][/ul]

Le premier couple de parenthèses va permettre de récupérer la chaîne (on le réutilise avec \1), le second sert à dire que le dernier “espace suivi de n’importe quoi” peu ne pas exister (cela permet de gérer les cas où le champ est en fin de ligne.

---

<div class="post-metadata">

**Author:** ![Arnaud](https://www.debian-fr.org/user_avatar/www.debian-fr.org/arnaud/32/4098_2.png) [@Arnaud](https://www.debian-fr.org/u/Arnaud)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/3 "2016-02-21T03:11:49Z")

</div>

Je suis loin d’être un spécialiste de awk, et j’ai une solution moins jolie que celle de MisterFreeze ( à condition que tes logs aient toujours la même syntaxe ), mais je la poste quand même :

```auto

```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/4 "2016-02-21T03:11:49Z")

</div>

Bonjour MisterFreez 😃

J’ai essayé ta solution avec sed et cela fonctionne correctement ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")  
Merci pour les explications des différents param utilisés ![:dance:](https://www.debian-fr.org/uploads/default/original/1X/c5479df83c1e5adae8782ae88416ebec2c474ae1.gif "Dance")

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/5 "2016-02-21T03:11:49Z")

</div>

Bonjour arnaud\_k

Merci pour ton aide.

Le problème est que la syntaxe des champs peut changer…  
Les champs sont dynamiques,donc dans mon cas cette solution n’est pas envisageable

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/6 "2016-02-21T03:11:50Z")

</div>

salut,

pour rester dans le shell `data=$(w3m -dump http://ip/test.php)
data="${data#*DATE = }"
data="${data%% *}"
echo $data
20110824`il ne s’agit pas de regex, mais de Remplacements de paramètres.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/7 "2016-02-21T03:11:50Z")

</div>

Salut,

Ton exemple ne fonctionne pas, il me retourne une chaine vide. ![:think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/8 "2016-02-21T03:11:51Z")

</div>

sans le contenu avec lequel tu as testé ces remplacements, je n’en dirai pas plus 😉

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/9 "2016-02-21T03:11:51Z")

</div>

le contenu est la chaine de mon premier post 🕶

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/10 "2016-02-21T03:11:51Z")

</div>

bon, ben, pour moi ça marche, même sous dash.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/11 "2016-02-21T03:11:51Z")

</div>

[quote=“Watael”]salut,

pour rester dans le shell `data=$(w3m -dump http://ip/test.php)
data="${data#*DATE = }"
data="${data%% *}"
echo $data
20110824`il ne s’agit pas de regex, mais de Remplacements de paramètres.[/quote]  
En effet et ça peut se faire en une ligne ainsi :

`data=$(w3m -dump http://ip/test.php)
data="${${data#*DATE = }%% *}"
echo $data
20110824`  
Mais j’aime bien les expressions régulières (les vraies ^^).

Je conseillerais la solution shell si la page ne renvoie que quelques lignes et sed si ça doit travailler sur de gros fichiers 🙂

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/12 "2016-02-21T03:11:51Z")

</div>

@Watael  
J’utilise bash (debian squeeze)

@MisterFreez  
J’ai une erreur de substitution sur ${${data#\*DATE = }%% \*}

> [@](#):
>
> Je conseillerais la solution shell si la page ne renvoie que quelques lignes et sed si ça doit travailler sur de gros fichiers

![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![valrik](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/db5fbb/32.png) [@valrik](https://www.debian-fr.org/u/valrik)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/13 "2016-02-21T03:11:51Z")

</div>

Bonjour à tous,  
`
	 :-) $ toto="IP = 192.168.1.199 HOTSNAME = PC-A DATE = 20110824 TIME = 12592034"
	 :-) $ echo $toto | awk -F"DATE = " '{print $2}' | awk '{print $1}'
	 20110824
	 :-) $ 
	 `  
Et si le format des données est toujours le même, pourquoi ne pas utiliser le séparateur de champs par défaut (l’espace) ?

`
    :-) $ echo $toto | awk '{print $9}'
    20110824
    :-) $ 
    `

---

<div class="post-metadata">

**Author:** ![valrik](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/db5fbb/32.png) [@valrik](https://www.debian-fr.org/u/valrik)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/14 "2016-02-21T03:11:53Z")

</div>

Un autre truc amusant :

`
    :-) $ echo $toto | awk -F "DATE = " '{print substr($2,1,8)}'
20110824
    :-) $ 
     `  
Ne fonctionne que si le champ à extraire est de longueur fixe. 😉

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/15 "2016-02-21T03:11:53Z")

</div>

Oui effectivement, bonne idée le substr !

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 3:11 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/16 "2016-02-21T03:11:56Z")

</div>

MisterFreez a dit :[quote]En effet et ça peut se faire en une ligne ainsi :

`
data=$(w3m -dump http://ip/test.php)
data="${${data#*DATE = }%% *}"
echo $data
20110824`[/quote]  
_seb_ a dit:[quote]@MisterFreez  
J’ai une erreur de substitution sur ${${data#\*DATE = }%% \*}[/quote]moi aussi.  
c’est normal : une variable dans une variable…avec des remplacements… ![:naughty:](https://www.debian-fr.org/uploads/default/original/1X/a8041fe32d5c63bbc6616e748e6b50af85839764.gif "Naughty")  
j’aurais dû le voir plus tôt. 😊

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:12 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/17 "2016-02-21T03:12:50Z")

</div>

Il y a des jours qui me font rappeler pourquoi j’utilise zsh…

Du coup juste pour dire avec zsh on peut même faire ça :

```auto

```

---

<div class="post-metadata">

**Author:** ![valrik](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/db5fbb/32.png) [@valrik](https://www.debian-fr.org/u/valrik)\
**Post date:** [Février 21, 2016, 3:12 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/18 "2016-02-21T03:12:56Z")

</div>

OUi, très puissant le zsh, mais coté échange avec les autres codeurs et portabilité… C’est pas utilisé par tous le monde, loin de là.  
Du coup, j’hésite à m’y mettre.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 3:13 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/19 "2016-02-21T03:13:00Z")

</div>

bonsoir,  
ma contribution :

```auto
#si pas besoin des param positionnels :
set -- $(w3m -dump http://ip/test.php)
echo "$9"
#sinon
infos=( $(w3m -dump http://ip/test.php) )
echo "${infos[8]}"
```

---

<div class="post-metadata">

**Author:** ![valrik](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/db5fbb/32.png) [@valrik](https://www.debian-fr.org/u/valrik)\
**Post date:** [Février 21, 2016, 3:13 UTC](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661/20 "2016-02-21T03:13:02Z")

</div>

Salut Totor,  
Qu’est que tu entends par :  
[quote]  
#si pas besoin des param positionnels :  
[/quote]  
C’est en relation avec le – de la ligne commande ?

Pour la deuxième, chaque champ se retrouve dans une case du tableau. Mais peux-tu me rappeler l’utilité des parenthèses englobantes de l’expression :  
`
     ( $(w3m -dump http://ip/test.php) )
     `

[Page suivante](https://www.debian-fr.org/t/awk-traiter-le-retour-dune-page-web/33661.md?page=2)
