[Shell Unix] J'ai un problème avec la commande cat

J'ai un problème avec la commande cat [Shell Unix] - Programmation

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.

Reply

Marsh Posté le 04-04-2002 à 14:01:43   

Reply

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 )

Reply

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]


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

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]

Reply

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!

Reply

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é


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

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]

Reply

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 !


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

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


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

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!

Reply

Marsh Posté le 04-04-2002 à 15:02:53   

Reply

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.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

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 }' ...


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

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 ?


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 04-04-2002 à 15:24:13    

euh vi :D
 
ou alors print $toto :D
 
j'ai voulu mettre toto pour varier mais je ne l'ai pas mis partout  :sarcastic:


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed