Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2011, 13h46   #1
Membre régulier
 
Avatar de flotho
 
Homme Florent THOMAS
Architecte de système d'information
Inscription : novembre 2006
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Florent THOMAS
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : novembre 2006
Messages : 130
Points : 87
Points : 87
Envoyer un message via Skype™ à flotho
Par défaut Redirections awk PHP et Affichage

Bonjour à tous,

Je travaille actuellement sur un script qui mélange du PHP et du awk dans un bash.
J'ai procédé à des redirections qui me semblent subtiles et me permettent de gagner du temps :
(awk1 <fich1 & php) | awk2 >fich2
Code :
1
2
( awk -F";" 'BEGIN { OFS=";"}{ gsub(/ *  /," "); print;fflush()}' < icecat_data.csv & php Recup_Icecat.php) | awk -F";" 'BEGIN { OFS=";"}{ gsub(/\"\"\"/,"\""); print; fflush()}1' > icecat_data_net.csv ;
Le script PHP génère un fichier icecat_data.csv qui est lu en tâche de fond pour nettoyer les espaces et les guillemets doubles. Tout cela fonctionne correctement. Il me reste toutefois une problématique que je n'ai pas réussi à régler.
En effet, le script PHP génère des messages sur la sortie standard via de simple echo. Lorsque je le lance seul, pas de problèmes, en revanche dans cette succession de process, plus rien en affichage! Pour des petits traitements ce n'est pas grave mais pour un fichier de plusieurs dizaines de milliers de ligne, on aura l'impression que la chose est figée.

D'où ma question, comment faire pour conserver l'affichage sur la sortie standard dans cette succession de commande?

J'ai essayé :
- (awk1 <fich1 | awk2 >fich2 ) & php affiche la sortie php mais ne restitue pas correctement fich2
- ( awk2 >fich2 & awk1 <fich1 ) & php affiche la sortie php mais ne restitue pas correctement fich2

je suis ouvert à d'autres propositions ;-)

Merci d'avance de vos propositions.
__________________
Créateur www.kipigo.com
Fondateur www.tdeo.fr
Linux | Java | J2EE | NB Platform | Pentaho | PostgreSQL
flotho est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/05/2011, 15h48   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Je peux me gourer, mais tout cela me semble bien compliqué pour pas forcément grand chose

Tu ne voudrais pas ré-expliquer un peu plus clairement ce que tu veux avoir au final ?

J'ai compris que tu as un script php qui écrit dans un fichier icecat_data.csv et qui écrit des infos sur stdout.
Le fichier généré passe ensuite dans awk pour le nettoyer. Pour ce que j'en comprends, tu souhaites que awk parse le fichier au fur et à mesure qu'il est renseigné par le script php ?
Pour finir, il y a un second nettoyage (pourquoi pas directement dans le premier ?).

Citation:
Envoyé par flotho Voir le message
Code :
1
2
 
(awk -F";" 'BEGIN { OFS=";"}{ gsub(/ *  /," "); print;fflush()}' < icecat_data.csv & php Recup_Icecat.php) | awk -F";" 'BEGIN { OFS=";"}{ gsub(/\"\"\"/,"\""); print; fflush()}1' > icecat_data_net.csv ;
Peut-être que je ne connais pas assez certains points, mais tu es sûr que ce que tu as ci-dessus va fonctionner ? Notamment la lecture en continue du premier awk sur ton fichier...
De plus, pour moi, si ton php écrit en sortie standard, ce qu'il produit va rentrer dans le second awk tout comme la sortie du premier awk !

Bon, après, je me gourre peut-être, mais j'ai vraiment pas l'impression que ça puisse marcher Peut-être que la méthode retenue n'est pas la bonne ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 16h25   #3
Membre régulier
 
Avatar de flotho
 
Homme Florent THOMAS
Architecte de système d'information
Inscription : novembre 2006
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Florent THOMAS
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : novembre 2006
Messages : 130
Points : 87
Points : 87
Envoyer un message via Skype™ à flotho
Citation:
Envoyé par Alek-C Voir le message
Tu ne voudrais pas ré-expliquer un peu plus clairement ce que tu veux avoir au final ?
J'ai compris que tu as un script php qui écrit dans un fichier icecat_data.csv et qui écrit des infos sur stdout.
Le fichier généré passe ensuite dans awk pour le nettoyer. Pour ce que j'en comprends, tu souhaites que awk parse le fichier au fur et à mesure qu'il est renseigné par le script php ?
Pour finir, il y a un second nettoyage (pourquoi pas directement dans le premier ?).
Dans le principe c'est exactement cela. Je vais tenter de mettre les deux nettoyage ensemble!
Citation:
Peut-être que je ne connais pas assez certains points, mais tu es sûr que ce que tu as ci-dessus va fonctionner ? Notamment la lecture en continue du premier awk sur ton fichier...
De plus, pour moi, si ton php écrit en sortie standard, ce qu'il produit va rentrer dans le second awk tout comme la sortie du premier awk !
La lecture en continue du premier fichier semble fonctionner et cela me permet de gagner un temps considérable. Et en effet j'ai un problème pour le second nettoyage. Je ne l'avais pas remarqué!
__________________
Créateur www.kipigo.com
Fondateur www.tdeo.fr
Linux | Java | J2EE | NB Platform | Pentaho | PostgreSQL
flotho est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/05/2011, 12h28   #4
Membre régulier
 
Avatar de flotho
 
Homme Florent THOMAS
Architecte de système d'information
Inscription : novembre 2006
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Florent THOMAS
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : novembre 2006
Messages : 130
Points : 87
Points : 87
Envoyer un message via Skype™ à flotho
Suite à vos conseils éclairés j'ai donc abouti à la commande suivante :
Code :
1
2
 
(awk -F";" '{ gsub(/ *  /," ");gsub(/\"\"/,""); gsub(/\";\"/,";"); gsub(/;/,"\";\"");print;fflush()}' < icecat_data.csv > icecat_data_net.csv) & php Recup_Icecat.php ;
Et là tout fonctionne comme il faut et j'ai même optimisé d'autres parties de mon code grâce à vos conseils.

Cordialement,
__________________
Créateur www.kipigo.com
Fondateur www.tdeo.fr
Linux | Java | J2EE | NB Platform | Pentaho | PostgreSQL
flotho est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/05/2011, 12h59   #5
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Intéressant, je ne connaissais pas ce truc pour lire un fichier en continue par awk !
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/05/2011, 13h32   #6
Membre régulier
 
Avatar de flotho
 
Homme Florent THOMAS
Architecte de système d'information
Inscription : novembre 2006
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Florent THOMAS
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : novembre 2006
Messages : 130
Points : 87
Points : 87
Envoyer un message via Skype™ à flotho
Magique !
http://www.crl.univ-paris-diderot.fr.../kb/unix/pipes

;-)
__________________
Créateur www.kipigo.com
Fondateur www.tdeo.fr
Linux | Java | J2EE | NB Platform | Pentaho | PostgreSQL
flotho est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/05/2011, 14h26   #7
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Nan mais ça, je connais

Ce que je ne savais pas, c'est que awk pouvait traiter un fichier en flux continue (avec fflush() ?) et gérer les nouvelles lignes qui y sont ajoutées.

A moins que ton fichier icecat_data.csv n'en soit pas un... je n'y avais pas pensé !

Bref, faut que je regarde ça chez moi un jour :p
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web