Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Aide pour convertir une ligne de commande awk en script awk
Envoyé par: EminoMeneko

Bonjour,
je souhaiterais convertir une ligne de commande qui marche en script AWK mais je ne sais pas trop comment m'y prendre. J'ai bien fait des essais mais rien de concluant.
En espérant que vous puissiez m'aider dans ma tâche.

En entrée je parse une page web et j’essaie de récupérer certaines adresses qui m'intéressent. En fait c'est pour écouter la radio. Je crée une interface avec Zenity pour qu'il me lance la station que j'aurais choisi avec le lecteur de mon choix.
Tout marche sauf cette partie script AWK.

Voilà la ligne de commande (normalement tout est sur une ligne mais je fais les retours sinon ça casse la présentation de la page par contre y'a des vieux smiley qui ne sont pas là normalement)
awk -F '"' '/href="http:\/\/listen/{print $2}' | 
awk -F '/|\\.' '
{if ($(NF-2)=="public2"){print $(NF-1),"32k PLS",$0} 
else if ($(NF-2)=="public3") {print $(NF-1),"96k PLS",$0} 
else if ($(NF-2)=="public5") {print $(NF-1),"40k ASX", $0} 
else {print $(NF-1) " " $0}}'

Donc faire ça en script, svp.

J'ai essayé de faire ce qui suit mais c'est n'importe quoi.

{
	FS="\""
	if ($0 ~ /href="http:\/\/listen/)
	{
		FS="/|\."
		if ($(NF-2)=="public2"){
			print $(NF-1),"32k PLS",$0
		}
		else if ($(NF-2)=="public3") {
			print $(NF-1),"96k PLS",$0
		}
		else if ($(NF-2)=="public5") {
			print $(NF-1),"40k ASX", $0
		} else {
			print $(NF-1) " " $0
		}
	}
}
Merci pour votre aide.

NEKOAITI

Poste le Friday 29 April 2011 21:43:31
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: NBaH

Bonjour,

Citation

je parse une page web
laquelle ?

Citation

Tout marche sauf cette partie script AWK.
ça marche pas comment ? quel est le résultat attendu ?

Poste le Friday 29 April 2011 22:32:19
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: EminoMeneko

Tout d'abord après relecture je note que malgré les bloc code l'affichage est une fois de plus saccagé ce qui ne va pas aider à la compréhension. Après les smiley, ce sont les adresses qui sont interprétées.J'y peut rien, désolé.

La page en question c'est di.fm (http://www.di.fm/)
donc en gros je fais
curl -s [www.di.fm]
Ce qui correspond à récupérer le code source.
Sur ce code source j'applique deux fois la commande awk pour récupérer ce que je veux. Ça marche bien mais je voulais convertir la partie ligne de commande en script awk et là je ne vois plus trop comment faire.
J'ai bien essayé d'autres choses hier après avoir posté mais je n'ai pas accès à mon poste Linux pour le moment (probablement jusque dimanche soir).

Je ne sais plus exactement ce que j'avais fait mais en gros ça devait ressembler à ça :
BEGIN {
	FS="\""
	ln=0
}
{
	if ($0 ~ /href="http:\/\/listen/) {
		line[ln]=$2
		ln++
	}
}
END {
	for(i=0; i<ln; i++)
	{
		FS="/|\."
		if (line~/public2/) {
			printf("32k PLS %s",line)
		}
		else if (line~/public3/) {
			printf("96k PLS %s",line)
		}
		else if (line~/public5/) {
			printf("40k ASX %s", line)
		}
#		else {
#			print $0
#		}
	}
}

Alors je ne sais plus si c'est exactement comme ça que je l'avais écrit. Mais ça y ressemble beaucoup.
A ce stade ça m'afficherait des choses genre
96k PLS [listen.di.fm]
32k PLS [listen.di.fm]
40k ASX [listen.di.fm]
96k PLS [listen.di.fm]
32k PLS [listen.di.fm]
40k ASX [listen.di.fm]
...

C'est presque ça sauf que J'isolais aussi le nom du fichier avec le second awk pour le replacer devant. Idéalement j'aurais souhaité mettre la première lettre en capitale mais c'est pas le plus important.
Ce que je cherche à obtenir c'est donc

liquiddnb 96k PLS [listen.di.fm]
liquiddnb 32k PLS [listen.di.fm]
liquiddnb 40k ASX [listen.di.fm]
oldschoolhouse 96k PLS [listen.di.fm]
oldschoolhouse 32k PLS [listen.di.fm]
oldschoolhouse 40k ASX [listen.di.fm]
...
ou mieux (mais on va se contenter de la version précédente)
Liquiddnb 96k PLS [listen.di.fm]
Liquiddnb 32k PLS [listen.di.fm]
Liquiddnb 40k ASX [listen.di.fm]
Oldschoolhouse 96k PLS [listen.di.fm]
Oldschoolhouse 32k PLS [listen.di.fm]
Oldschoolhouse 40k ASX [listen.di.fm]
...

La ligne de commande marche comme ça
Avec curl je parcours le code source que j'envoie au travers d'un pipe vers un premier awk qui va isoler les lignes qui m'intéressent c'est-à-dire celles qui contiennent "[listen"];.
Si on prend la ligne dans son ensemble l'adresse est isolé entre guillemets doubles donc en gros
... href"[listen.di.fm]; ...
Si on prend le guillemet double en séparateur le 2ème champ isole l'adresse donc ça c'est bon.
Dans la ligne de commande le second awk redéfinit le séparateur pour pouvoir isoler facilement le nom du fichier et reformater la ligne sous le format
nom_station bitrate type url_station
url_station correspond à l'ensemble de la ligne d'où le $0.

Je voulais adapter cette ligne de commande dans un programme AWK.
Voilà, j'espère que c'est plus clair.
Merci.

NEKOAITI

Poste le Saturday 30 April 2011 13:03:56
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: EminoMeneko

ERRATUM
C'est pas line tout seul mais line sinon ça marche pas.

NEKOAITI

Poste le Saturday 30 April 2011 13:12:11
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: EminoMeneko

Line entre crochets i Désolé mais y'a toujours pas de fonction édition autant que j'en sache.

NEKOAITI

Poste le Saturday 30 April 2011 13:13:02
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: NBaH

wget -O - di.fm |\
awk -F'/' '/listen.di.fm/{
 {if ($4 ~ /public2/) gsub("\..*","",$5); prop = "32k PLS" }
 {if ($4 ~ /public3/) gsub("\..*","",$5); prop = "96k PLS" }
 { if ($4 ~ /public5/) gsub("\..*","",$5); prop = "40k ASX" }
print toupper(substr($5,1,1))""substr($5,2),prop" [listen.di.fm]" }'
selon la version, en cherchant dans le man, on peut peut-être trouver une fonction plus propre que cette série de if...

Poste le Sunday 1 May 2011 18:50:31
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: NBaH

wget -O - di.fm |\
awk -F'/' '/listen.di.fm/{
 gsub("\..*","",$5); 
 {if ($4 ~ /public2/) prop = "32k PLS" }
 {if ($4 ~ /public3/) prop = "96k PLS" }
 {if ($4 ~ /public5/) prop = "40k ASX" }
print toupper(substr($5,1,1))""substr($5,2),prop" [listen.di.fm]" }'
un seul gsub suffit

Poste le Sunday 1 May 2011 18:54:13
Répondre     Citer    
Re: Aide pour convertir une ligne de commande awk en script awk
Envoyé par: EminoMeneko

Y'a de l'idée mais malheureusement ça n'est pas un programme awk et surtout je n'arrive pas le faire marcher e l'état. Pourtant quand je vois le code ça devrait, non ?
Je ne comprend pas. En tout cas merci d'avoir essayé de m'aider.
C'est pas pressant non plus et je trouverais bien une solution. J'ai d'autres priorités pour le moment. winking smiley

NEKOAITI

Poste le Tuesday 3 May 2011 14:24:52
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Aide pour convertir une ligne de commande awk en script 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