J'ai un problème avec la commande cat [Shell Unix] - Programmation
Marsh Posté le 04-04-2002 à 14:15:36
./script fichier
while read ligne
do
....
done >$1
un truc comme sa marche ( vérifie la syntaxe )
Marsh Posté le 04-04-2002 à 14:18:05
Tu n'as pas l'impression d'essayer de tuer une baleine avec une tapette à mouches ?
awk '{ if(NR==1) print "Ma 1e ligne de remplacement"; else print }' fichier > nouveau_fichier
[jfdsdjhfuetppo]--Message édité par Jar Jar--[/jfdsdjhfuetppo]
Marsh Posté le 04-04-2002 à 14:19:19
booohh!! :-) c'etait pour rester un peu pres dans la mm syntaxe que lui
[jfdsdjhfuetppo]--Message édité par fabriceMerc--[/jfdsdjhfuetppo]
Marsh Posté le 04-04-2002 à 14:40:02
bon, le truc de fabriceMerc marche, mais c'est vrai que la ligne de Jar Jar paraît bien aussi.
Sauf que ça me renvoit un erreur :
awk : Field $() is not correct
J'ai écrit ça :
awk '{ if (NR==1) print $nom; else print }' ${REP_OUT:?}/$1 > ${REP_OUT:?}/$nom.TXT
Jar Jar, si tu pouvais me dire d'où ça vient, je pourrais gagner quelques lignes!
Marsh Posté le 04-04-2002 à 14:46:15
ca doit etre $nom qui merde
pour passer une variable à un awk c'est un peu plus compliqué
Marsh Posté le 04-04-2002 à 14:50:59
Dans ce cas, ça risque d'être un peu plus compliqué avec awk.
Mais on peut utiliser le tail pour ce que je veux :
tail -n +2 fichier_a_recopier >> nouveau_fichier
Ca recopie fichier_a_recopier à partir de la 2ème ligne et l'ajoute à la suite de nouveau_fichier.
[jfdsdjhfuetppo]--Message édité par fdl--[/jfdsdjhfuetppo]
Marsh Posté le 04-04-2002 à 14:52:23
nom=$nom awk '{ if (NR==1) print ENVIRON["nom"]; else print }'
Pour plus d'informations, cherche de la doc sur awk. C'est génial, ce truc. Personnellement, je l'utilise tous les jours pour faire du traitement de données numériques, c'est presque aussi puissant qu'un tableur mais ça va infiniment plus vite !
Marsh Posté le 04-04-2002 à 14:54:15
fdl a écrit a écrit : Dans ce cas, ça risque d'être un peu plus compliqué avec awk. Mais on peut utiliser le tail pour ce que je veux : tail -n +1 fichier_a_recopier >> nouveau_fichier Ca recopie fichier_a_recopier à partir de la 2ème ligne et l'ajoute à la suite de nouveau_fichier. |
effectivement ca doit marcher mais pour ton propre intérêt, tu ferais mieux d'essayer de maîtriser awk
Marsh Posté le 04-04-2002 à 15:02:53
Bon, là je pinaille un peu, mais si $nom est une variable locale,
est-ce qu'il y a un autre mot clé que ENVIRON?
Pour évietr de faire un 'export' dans le code, ça économise une ligne!
Marsh Posté le 04-04-2002 à 15:05:44
fdl a écrit a écrit : Bon, là je pinaille un peu, mais si $nom est une variable locale, est-ce qu'il y a un autre mot clé que ENVIRON? Pour évietr de faire un 'export' dans le code, ça économise une ligne! |
On est obligé de passer par l'environnement, car le script awk s'exécute dans un autre processus.
Par contre, si tu mets nom=$nom au début de la ligne, tu économises la ligne export.
Marsh Posté le 04-04-2002 à 15:14:52
tu peux aussi rajouter l'option -v nom_var=valeur :
awk -v toto=$nom '{ print $nom }' ...
Marsh Posté le 04-04-2002 à 15:21:28
jupiler a écrit a écrit : tu peux aussi rajouter l'option -v nom_var=valeur : awk -v toto=$nom '{ print $nom }' ... |
Ça serait pas plutôt -v nom=$nom ?
Marsh Posté le 04-04-2002 à 15:24:13
euh vi
ou alors print $toto
j'ai voulu mettre toto pour varier mais je ne l'ai pas mis partout
Marsh Posté le 04-04-2002 à 14:01:43
salut,
j'ai un fichier dont je dois modifier la 1ere ligne puis recopier les suivantes.
Donc, je fais un :
for line in `cat le_fichier`
do
si 1ere ligne : echo nouvelle_ligne > nouveau_fichier
sinon, echo line >> nouveau_fichier
done;
Mais, si la ligne comporte un espace ou plusieurs, dans nouveau_fichier, cela se transforme en retour à la ligne à chaque fois.
Le cat semble ne pas prendre toute la ligne et tient compte des espaces.
Est-ce que quelqu'un pourrait resoudre mon probleme.
C'est urgent! Merci d'avance.