Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 13/10/2007, 15h03   #1
Membre confirmé
 
Avatar de Chatbour
 
Étudiant
Inscription : septembre 2006
Messages : 427
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 427
Points : 263
Points : 263
Par défaut Problème avec awk et un pipe

Salut à tous

le contenu du fichier fichier.txt :
20|25
12|62
19|22

Pourquoi ces codes ne marchent pas ?

Code :
cat fichier.txt | awk -F"|" '{print $0"|"$1+$2}' > fichier.txt
Code :
cat fichier.txt | awk -F"|" '{print $0"|"$1+$2}' | cat>fichier.txt

les deux écrasent le contenu du de fichier.txt et ceci devient vide..


Merci d'avance..
Chatbour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 15h49   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Il faut que tu passes par un fichier temporaire.

Lors d'un pipe, les commandes sont exécutées en parallèle. Tu demandes donc de lire et d'écrire sur le même fichier.

En pratique, lorsque tu utilises une simple redirection, le fichier est écrasé et ouvert en écriture. Or là, tu cherches à le lire en même temps. D'où le problème.

Par ailleurs, il n'est pas utile d'utiliser cat ici : awk est capable de lire le fichier tout seul, s'il est en argument.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 17h33   #3
Membre confirmé
 
Avatar de Chatbour
 
Étudiant
Inscription : septembre 2006
Messages : 427
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 427
Points : 263
Points : 263
Merci pour la réponse LLB

ça marche bien avec un fichier temporaire :

Code :
awk -F"|" '{print $0"|"$1+$2}' fichier.txt > fichier_tmp ; cat fichier_tmp > fichier ; rm fichier_tmp
Chatbour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 19h18   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Tu préfères pas utiliser mv ?
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 11h40   #5
Membre confirmé
 
Avatar de Chatbour
 
Étudiant
Inscription : septembre 2006
Messages : 427
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 427
Points : 263
Points : 263
oui c'est faisable aussi..
Chatbour est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h31.


 
 
 
 
Partenaires

Hébergement Web