[Shell] Concatener 2 lignes

Concatener 2 lignes [Shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 01-12-2005 à 17:29:33    

Bonjour,  
 
je souhaiterais concatener 2 lignes dans 1 fichier :
AAA
BBBBB
pour avoir : AAA BBBB
 
je voudrais le faire en shell, avec sed ou awk peut-être...  :??:  

Reply

Marsh Posté le 01-12-2005 à 17:29:33   

Reply

Marsh Posté le 01-12-2005 à 17:31:09    

D'où viennent ces deux lignes ?

Reply

Marsh Posté le 01-12-2005 à 17:31:37    

sinon
echo "AAA BBBB" > fichier
mais je doute que c'est ce que tu veux :/

Reply

Marsh Posté le 01-12-2005 à 17:45:17    

Pour remplacer ton retour à la ligne par un espace dans ton_fichier, tu peux par exemple faire :

cat ton_fichier | tr '\n'  ' '

ou

sed -e 'N;s/\n/ /' ton_fichier

Est-ce que ça t'aide ?


Message édité par Pillow le 02-12-2005 à 05:50:04
Reply

Marsh Posté le 01-12-2005 à 20:43:58    

Mon fichier ressemble plutôt à cela :
 
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
                            ------------- ddddddddddddddddddd
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                        01/12/2005 zzzzzzzzzzzzzzzzzzzzz
 
je voudrais que cela ressemble à ceci :  
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss ------------- ddddddddddddddddddd
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 01/12/2005 zzzzzzzzzzzzzzzzzzzzz
 
je voudrais faire la concatenation sur certaine ligne.
j'essayerai demain --> sed -e 'N;s/\n/ /' ton_fichier.
 
pillow, comment tu fais pour encadrer du texte ?

Reply

Marsh Posté le 02-12-2005 à 05:49:19    

Ça dépend un peu de la longueur du fichier, mais tu peux peut être matcher les lignes une par une, quelque chose comme ça :

sed -e ':a;/sssss$\|yyyyy$/N;s/\n[ \t]*/ /;ta' ton_fichier

(il ne fallait pas s'attendre à du code de qualitaÿ à cette heure là, hein :o )
 
Avec bien sûr les regex qui correspondent aux lignes desquelles tu veux enlever le retour à la ligne final.
 
Si tes lignes se ressemblent trop, tu peux aussi matcher la ligne après le retour à la ligne. Pour un test basique :

sed -e ':a;/sssss$\|yyyyy$/N;/----\|01/s/\n[ \t]*/ /;ta' ton_fichier

( [:ciler]; mais il n'y a rien de compliqué en fait, je peux expliquer si tu veux, mais demain soir [:petrus75] )
 
 
 
 
 
Cependant si tu as systématiquement des espaces ou des tabulations après le retour à la ligne, et que ton fichier est assez gros ou qu'il évolue souvent, tu as intérêt d'utiliser plutôt ce fait. En sed, ça commence à devenir un peu plus compliqué : je te conseillerais plutôt perl pour ça :o  
 
 
 
 
(pour l'encadrage : balise [ fixed]; tu peux editer ce post pour voir comment ça marche si tu veux)

Reply

Marsh Posté le 02-12-2005 à 10:43:35    

en AWK (à la va-vite)

Code :
  1. BEGIN{couple=0;}
  2. {
  3. if (couple==1)
  4. {
  5. printf "%s %s \n",ligne_precedente,$0;
  6. couple=0;
  7. }
  8. else
  9. {
  10. ligne_precedente=$0;
  11. couple=1;
  12. }
  13. }


Message édité par jlighty le 02-12-2005 à 13:29:01
Reply

Marsh Posté le 02-12-2005 à 22:24:17    

j'ai essaye sed -e 'N;s/\n/ /' ton_fichier, cela fonctionne, mais je vais quand même essayer le awk.
merci à vous  :jap:

Reply

Sujets relatifs:

Leave a Replay

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