Bei einer Datei wie dieser
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Gibt es ein Befehlszeilenprogramm, um den Inhalt so zu transponieren, dass die Ausgabe so aussieht?
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Cory Klein
quelle
quelle
python
, b)ruby
ist nicht weniger portabel alspython
und c) zeigt auch, wie die Eingabe / Ausgabe übergeben wird Dateien. Bravo @luikore und willkommen bei Unix & Linux. Bitte bleiben Sie dabei.CSV-Analyse ist nur mit POSIX-Tools nicht einfach durchzuführen, es sei denn, Sie verwenden eine vereinfachte CSV-Variante ohne Anführungszeichen (sodass in einem Feld keine Kommas angezeigt werden können). Selbst dann scheint es nicht einfach zu sein, diese Aufgabe mit awk oder einer anderen Textverarbeitung zu erledigen. Sie können Perl mit
Text::CSV
, Python mitcsv
, R mitread.csv
, Ruby mit CSV , ... verwenden. (Alle diese sind Teil der Standardbibliothek der jeweiligen Sprache mit Ausnahme von Perl.)Zum Beispiel in Python:
quelle
Von /programming//a/2776078 :
Und dann konvertieren
Oder in der Pipeline
quelle
... | csvtranspose | ...
würde nur die Syntax übertreffen.Eine schnelle und schmutzige Bash- Lösung:
quelle
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
Zelle ist codiert"this ""is"" example"
Ich bin nicht überzeugt, ob diese Lösung solche Fälle ordnungsgemäß behandeltIn Anbetracht der vorgeschlagenen Einschränkung (keine Anführungszeichen, keine eingebetteten Kommas) ist es in awk einfach (wie es in Perl ohne Berücksichtigung von mehr als tausend Zeilen in wäre
CSV.pm
, 2300 Zeilen incsv.rb
- Python hat nur 450 Zeilen incsv.py
).Hier ist ein Beispiel für awk:
Übrigens: Das angegebene Beispiel hatte zusätzlichen Platz, von dem OP annahm, dass er entfernt werden würde. Die anderen Beispiele haben dieses Detail nicht angesprochen.
quelle