Transformer des colonnes en lignes dans un fichier

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|MardiJetez 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.
Ce document intitulé « Transformer des colonnes en lignes dans un fichier » issu de Comment Ça Marche (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.