Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1775 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] commande cat qui rajoute un retour chariot

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[shell] commande cat qui rajoute un retour chariot

n°1912766
gilloux
Posté le 07-08-2009 à 12:08:17  profilanswer
 

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
mood
Publicité
Posté le 07-08-2009 à 12:08:17  profilanswer
 

n°1912771
Taz
bisounours-codeur
Posté le 07-08-2009 à 12:09:55  profilanswer
 

en GNU, echo -n

n°1912775
gilloux
Posté le 07-08-2009 à 12:12:07  profilanswer
 

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
n°1912778
Taz
bisounours-codeur
Posté le 07-08-2009 à 12:13:53  profilanswer
 

tr -d '\n'

n°1912782
gilloux
Posté le 07-08-2009 à 12:17:30  profilanswer
 

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

n°1912917
pataluc
Posté le 07-08-2009 à 15:27:10  profilanswer
 

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

n°1912924
Taz
bisounours-codeur
Posté le 07-08-2009 à 15:47:44  profilanswer
 

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

Message cité 1 fois
Message édité par Taz le 07-08-2009 à 15:47:53
n°1912962
pataluc
Posté le 07-08-2009 à 16:51:23  profilanswer
 

Taz a écrit :

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



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

n°1913044
Sve@r
Posté le 08-08-2009 à 01:26:13  profilanswer
 

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.
n°1913414
Taz
bisounours-codeur
Posté le 10-08-2009 à 12:49:37  profilanswer
 

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 $?.

mood
Publicité
Posté le 10-08-2009 à 12:49:37  profilanswer
 

n°1913711
Sve@r
Posté le 10-08-2009 à 20:41:59  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] commande cat qui rajoute un retour chariot

 

Sujets relatifs
[Projet] Une bouteille à la mer, le retour \o/Fonction mail OK en ligne de commande php, KO par le Web
[Shell/Batch] Renommer des fichiers[Shell] Suppression retours à la ligne/retours chariot
Commande pour faire un Switchmenu...Shell : besoin d'aide pour mon script
[Excel] renommer bouton de commande + l'affecter à ttes les feuillesRetour inattendu d'un select
Tableau de commande sql a interpreter 
Plus de sujets relatifs à : [shell] commande cat qui rajoute un retour chariot


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR