[shell] commande cat qui rajoute un retour chariot

commande cat qui rajoute un retour chariot [shell] - Shell/Batch - Programmation

Marsh Posté le 07-08-2009 à 12:08:17    

Bonjour,
 
Je souhaite concatener deux fichiers sans qu'un retour chariot ne soit ajouté entre les deux.
 
Si je fais cela :

Code :
  1. echo bon > f1
  2. echo jour >f2
  3. cat f1 f2 > resultat
  4. cat resultat


j'obtiens

Code :
  1. bon
  2. jour


 
alors que je souhaite obtenir

Code :
  1. bonjour


 
je ne trouve pas d'option pour que cat ne rajoute pas ce retour chariot...
 
quelqu'un a t-il une idée ?
 
merci

Message cité 1 fois
Message édité par gilloux le 07-08-2009 à 12:10:47
Reply

Marsh Posté le 07-08-2009 à 12:08:17   

Reply

Marsh Posté le 07-08-2009 à 12:09:55    

en GNU, echo -n

Reply

Marsh Posté le 07-08-2009 à 12:12:07    

Merci Taz, mais je suis sous AIX en sh, pour moi la commande echo -n retourne "-n"
 
Les "echo" dans mon 1er post sont là pour faire un test simple, mais les fichiers ne sont pas générés avec "echo" dans ma problématique.
Mon problème est de concaténer 2 fichiers sans qu'un retour chariot soit rajouter dans cette opération


Message édité par gilloux le 07-08-2009 à 12:15:39
Reply

Marsh Posté le 07-08-2009 à 12:13:53    

tr -d '\n'

Reply

Marsh Posté le 07-08-2009 à 12:17:30    

Je ne souhaite pas supprimer les retours chariots déjà présent dans mes fichiers que je concatene...

Reply

Marsh Posté le 07-08-2009 à 15:27:10    

tu peux le faire en combinant un for et un awk sinon...
 
qqchose du genre

Code :
  1. for f in f1 f2
  2. do
  3.     awk '
  4.         BEGIN {
  5.             l=""
  6.         }
  7.         {
  8.             if (l!="" ) {
  9.                 print l;
  10.             }
  11.             l = $0;
  12.         }
  13.         END {
  14.             printf l;
  15.         }' $f
  16. done

mais je trouve que ca fait un peu violent pour si peu...

Reply

Marsh Posté le 07-08-2009 à 15:47:44    

Code :
  1. perl -pe 'chomp; print "\n" if $x++;'

Message cité 1 fois
Message édité par Taz le 07-08-2009 à 15:47:53
Reply

Marsh Posté le 07-08-2009 à 16:51:23    

Taz a écrit :

Code :
  1. perl -pe 'chomp; print "\n" if $x++;'



chuis une brele en perl, tu peux détailler stp?  
 

Reply

Marsh Posté le 08-08-2009 à 01:26:13    

gilloux a écrit :

je ne trouve pas d'option pour que cat ne rajoute pas ce retour chariot...


cat ne rajoute rien. Il ne fait que lire ce qu'il y a dans le fichier et l'affiche sur la sortie standard. Si ton fichier contient des retour charriots (notamment ceux qui sont à la fin de tes lignes par exemple) ben cat l'affiche connement.
 

gilloux a écrit :

Je ne souhaite pas supprimer les retours chariots déjà présent dans mes fichiers que je concatene...


Code :
  1. #!/bin/sh
  2. exec 3<f1
  3. exec 4<f2
  4. while true
  5. do
  6.     read lig1 0<&3
  7.     read lig2 0<&4
  8.     test -z "$lig1" -o -z "$lig2" && break
  9.     echo "$lig1$lig2"
  10. done


 
Ou bien plus simplement

Code :
  1. paste -d'' f1 f2


Message édité par Sve@r le 09-08-2009 à 05:23:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 10-08-2009 à 12:49:37    

oui paste, maintenant que c'est expliqué, je comprends.
 
Sve@r: ton read il va pas faire la diff entre EOF et une ligne vide. C'est important de tester $?.

Reply

Marsh Posté le 10-08-2009 à 12:49:37   

Reply

Marsh Posté le 10-08-2009 à 20:41:59    

Taz a écrit :

Sve@r: ton read il va pas faire la diff entre EOF et une ligne vide. C'est important de tester $?.


Arf bien vu. Bon j'utilise souvent ce système pour traiter des fichiers où aucune ligne n'est vide mais effectivement vérifer $? est plus intelligent...
 

Code :
  1. #!/bin/sh
  2. exec 3<f1
  3. exec 4<f2
  4. while true
  5. do
  6.      read lig1 0<&3; e1=$?
  7.      read lig2 0<&4; e2=$?
  8.      test $e1 -ne 0 -o $e2 -ne 0 && break
  9.      echo "$lig1$lig2"
  10. done


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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