Étant donné un fichier comme ça
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Existe-t-il un utilitaire de ligne de commande pour transposer le contenu afin que la sortie apparaisse comme telle
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Cory Klein
la source
la source
python
, b)ruby
n'est pas moins portable quepython
, et c) cela montre également comment passer les entrées / sorties des dossiers. Bravo @luikore, et bienvenue sur Unix et Linux. Veuillez rester.L'analyse CSV n'est pas facile à faire avec les outils POSIX uniquement, sauf si vous utilisez une variante CSV simplifiée sans guillemets (de sorte que les virgules ne puissent pas apparaître dans un champ). Même alors, cette tâche ne semble pas facile à faire avec un outil de traitement de texte ou un autre outil. Vous pouvez utiliser Perl avec
Text::CSV
, Python aveccsv
, R avecread.csv
, Ruby avec CSV ,… (Tous ces éléments font partie de la bibliothèque standard du langage respectif à l'exception de Perl.)Par exemple, en Python:
la source
Depuis /programming//a/2776078 :
Et puis convertir
Ou en cours
la source
... | csvtranspose | ...
battrait cela, au niveau de la syntaxe.Une solution bash rapide et sale :
la source
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
à- dire que la cellule est encodée"this ""is"" example"
Je ne suis pas convaincu si cette solution gère correctement ces casCompte tenu de la limitation suggérée (pas de guillemets, pas de virgules imbriquées), c'est simple en awk (comme ce serait en perl sans prendre en compte plus de mille lignes en
CSV.pm
, 2300 lignes encsv.rb
- python n'a que 450 lignescsv.py
).Voici un exemple pour awk:
Soit dit en passant: l'exemple donné avait de l'espace supplémentaire que OP supposait être supprimé; les autres exemples n'ont pas abordé ce détail.
la source