Transformer des colonnes en lignes dans un fichier

Décembre 2016

Différents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc.

Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en colonnes

Un exemple simple:
$ cat in.txt
2008-09-21|2008-09-22|2008-09-23
Dimanche|Lundi|Mardi

Solution


Voici une méthode "simple" pour transformer ce fichier en un fichier de 3 lignes de deux colonnes (date|nom du jour)
$ split -l1 in.txt tmp_
$ sed -i 's/|/\x0A/g' tmp_
$ paste -d'|' tmp_* >out.txt
$ rm -f tmp_*
$ cat out.txt
2008-09-21|Dimanche
2008-09-22|Lundi
2008-09-23|Mardi
Jetez un oeil aux pages man de split et paste, ce sont deux commandes simples, mais Ô combien pratiques :-)

Limitations

  • Sous cette forme, le script ne fonctionnera que si le nombre de lignes en entrée est inférieur à 676. Cela est dû au suffixe ajouté par la commande split qui ne comporte par défaut que 2 caractères, mais en cas de besoin, l'option -a permet d'augmenter cette limite.
  • Pour la commande sed (qui peut-être changée par d'autres commandes assez simplement) selon les versions, deux problèmes peuvent se poser:
    • L'option -i exige un suffixe (.bak, ou autre) en ce cas, il faut bien faire attention à modifier la commande paste pour ne prendre en compte que les fichiers générés par split et non ceux par sed (tmp_?? par exemple)
    • La version ne supporte pas la notation octale '\012' ou hexadécimale '\x0A' dans ce cas, le plus simple que j'ai trouvé, c'est d'échapper le retour chariot comme suit: taper un backslash, puis les deux combinaisons suivantes <Ctrl+V> <Ctrl+J>(ou appuyer sur entrée), puis terminer la commande.

A voir également :

Ce document intitulé «  Transformer des colonnes en lignes dans un fichier  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.