Transformer des colonnes en lignes dans un fichier

Dernière mise à jour le 10 novembre 2009 à 16:29 par marlalapocket
Publié par asevere
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.
Meilleures réponses pour « Transformer des colonnes en lignes dans un fichier » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Comment lire un fichier .ps (Postscript) ? Voir2 solutions: Solution 1 Installez PDF Creator (gratuit) (Lors de l'installation, cocher la case "Associer .PS à PDF Converter") Double-cliquez sur le fichier .ps pour le convertir en PDF. Ouvrez le fichier PDF avec votre logiciel habituel...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Transformations de XML avec XSLT VoirXSLT et XSL/FO XSL (eXtensible Stylesheet Language) possède deux composantes : XSLT, eXtensible Stylesheet Transformation XSL/FO, eXtensible Stylesheet formatting le langage de transformation des données (XSLT, eXtensible Stylesheet...
Linux - L'arborescence des fichiers VoirLa hiérarchie des fichiers sous Linux Pour assurer la compatibilité et la portabilité, les systèmes Linux respectent l'unique norme FHS (File Hierarchy Standard). La hiérarchie de base est la suivante : /la racine, elle contient les...