Concaténation foireuse de 2 variables sous bash

Concaténation foireuse de 2 variables sous bash - Shell/Batch - Programmation

Marsh Posté le 17-10-2013 à 18:12:30    

Bonjour,
 
En cours d'écriture d'un script en bash (dans lequel je compte faire intervenir du gawk, mais ça sera une autre histoire), je cherche bêtement à concaténer 2 variables :
$entete dont le contenu est "1309142;7510;1310103052;201310101535"
et
$entete2 dont le contenu est "201310101626;20131016230623"
 
J'ai donc songé à faire ceci :
variable_cible=$entete";"$entete2
Afin d'obtenir "1309142;7510;1310103052;201310101535;201310101626;20131016230623"
 
Cela ne fonctionne pas puisque j'obtiens curieusement la chaîne suivante : ";201310101626;2013101623062310101535"
Un peu comme si les caractères constitués par le ";" suivi du contenu de la variable $entete2 se substituait au début du contenu de la variable $entete1 !
 
Auriez-vous une idée, une piste sur la raison de ce binzz (oui je suis de la vieille génération qui a vu Les Visiteurs au cinéma...) ?
 
Je vous en remercie par avance.


---------------
Not just a man...
Reply

Marsh Posté le 17-10-2013 à 18:12:30   

Reply

Marsh Posté le 17-10-2013 à 20:35:30    

Le point virgule représente une fin de commande. Là, il est entre guillemets, alors il aurait dû être accepté, mais c'est peut-être un défaut de l'interpréteur de commande, ou un cas particulier.
 
Pour résoudre le problème, essayer :

variable_cible="${entete};${entete2}"

ou

variable_cible=`echo "${entete} ${entete2}" | awk '{printf("%s;%s", $1, $2)}'`

[:angellus2:3]

Message cité 1 fois
Message édité par olivthill le 17-10-2013 à 20:43:09
Reply

Marsh Posté le 18-10-2013 à 08:29:07    

olivthill a écrit :

Le point virgule représente une fin de commande. Là, il est entre guillemets, alors il aurait dû être accepté, mais c'est peut-être un défaut de l'interpréteur de commande, ou un cas particulier.
 
Pour résoudre le problème, essayer :

variable_cible="${entete};${entete2}"

ou

variable_cible=`echo "${entete} ${entete2}" | awk '{printf("%s;%s", $1, $2)}'`

[:angellus2:3]


 
Bonjour et merci pour votre retour mais... j'obtiens toujours cette satanée chaîne : ";201310101626;2013101623062310101535" en retour.
Screugneugneu !!
 
[EDIT]
 
Bon, j'ai fait le test en substituant les ";" par des "X" ... même résultat.
 
J'ai donc simplifié au maximum le test de cette manière (les variables correspondant à une date de type AAAAMMJJHHMM)
var1=201310101535
var2=201310101626
La commande :
echo $var1 $var2
donne curieusement le résultat suivant : " 201310101626"     (sans les guillemets évidemment)
 
Par contre si je rentre des valeurs quelconques dans var1 et var2 :
var1=123456789012
var2=198765432109
echo $var1 $var2 --> "123456789012 198765432109"
 
Mon bash interpréterait-il les dates, est-ce que cela mettrait le bazard ?  


Message édité par hegoalde le 18-10-2013 à 08:48:57

---------------
Not just a man...
Reply

Marsh Posté le 26-11-2013 à 09:20:05    

il y a la commande paste
 

Code :
  1. paste  -d ' ' fichier1 fichier2 > fichier_final


 
si tu souhaites mettre un point virgule entre les 2 fichier à ce moment tu mets -d ';'  
et normalementsi tu as le même nombre de ligne dans tes 2 fichiers ça colle

Reply

Sujets relatifs:

Leave a Replay

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