Couper une ligne et la coller à la suite d'une autre

Résolu
Dan_NB Messages postés 9 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je dois modifier l'output d'un programme qui est assez volumineux pour pouvoir lire les données qui m'intéresse plus facilement. Il s'agit d'un fichier texte que je manipule à l'aide d'un scriptshell (commande bash).

J'aimerais pouvoir couper une ligne et la placer à la suite de la première ligne de mon fichier ou la 2ième ligne de mon fichier (selon les cas). Voici un exemple :

A B C
1 2 3
D E F
4 5 6
G H I
7 8 9

deviendrait

A B C D E F G H I
1 2 3 4 5 6 7 8 9

Auriez vous, une idée sur la commande à utiliser et les regexp nécessaire ?
Merci d'avance pour votre aide !

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
     
    Salut,

    En se basant sur l'exemple donné, je m'excuse mais le "selon les cas" est trop vague.

    $ cat plop 
    A B C
    1 2 3
    D E F
    4 5 6
    G H I
    7 8 9
    
    $ cat script.sed 
    #n
    1 h                                    
    n                                      
    :z                                     
    x                                      
    N                                      
    $ !b z                                 
    s/\n/ /g                               
    x                                      
    s/\n/ /g                               
    G                                      
    p                                      
    
    $ sed -f script.sed plop 
    A B C D E F G H I
    1 2 3 4 5 6 7 8 9

    2
    1. Dan_NB Messages postés 9 Statut Membre
       
      Oui effectivement je suis assez vague dans mes cas. En fait on considère la ligne 1 et 2. Et on colle les lignes suivantes (3,4,...) alternativement à la suite de la ligne 1 et de la ligne 2. Donc ligne 3 va à la suite de ligne 1, ligne 4 à la suite de ligne 2, ligne 5 à la suite de ligne 1 etc...

      J'ai testé ton script et il fonctionne comme je veux ! Merci beaucoup (et aussi merci pour la rapidité de ta réponse).

      Une dernière question : comment fait-on pour supprimer la première colonne de mon fichier sauf l'élément de la première ligne ? ex :

      A B C
      1 2 3
      D E F

      devient

      A B C
      2 3
      E F

      Avec awk j'arrive à supprimer tout la première colone mais pas à conserver l'élément (1,1).
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      $ cat plop 
      A B C
      1 2 3
      D E F
      4 5 6
      G H I
      7 8 9
      
      $ sed '1! s/^[^ ]* //' plop 
      A B C
      2 3
      E F
      5 6
      H I
      8 9
      0
    3. Dan_NB Messages postés 9 Statut Membre
       
      Merci beaucoup !
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    Avec awk j'arrive à supprimer tout la première colone mais pas à conserver l'élément (1,1).
    $ awk 'NR>1 {$1=""; sub(OFS, "")} {print}' fichier
    A B C
    2 3
    E F
    $ 
    
    0