Biorąc pod uwagę taki plik
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Czy istnieje narzędzie wiersza polecenia do transponowania zawartości, aby dane wyjściowe wyglądały tak
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Cory Klein
źródło
źródło
python
, b)ruby
jest nie mniej przenośna niżpython
, i c) pokazuje także, jak przekazać wejście / wyjście akta. Bravo @luikore, witamy w systemach Unix i Linux. Proszę, trzymaj się.Analiza składni CSV nie jest łatwa do wykonania tylko za pomocą narzędzi POSIX, chyba że używasz uproszczonego wariantu CSV bez cudzysłowu (aby przecinki nie pojawiały się w polu). Nawet wtedy to zadanie nie wydaje się łatwe do wykonania z awk lub innym przetwarzaniem tekstu w narzędziu. Możesz używać Perla z
Text::CSV
, Pythona zcsv
, R zread.csv
, Ruby z CSV ,… (Wszystkie są częścią standardowej biblioteki odpowiedniego języka z wyjątkiem Perla.)Na przykład w Pythonie:
źródło
Od /programming//a/2776078 :
A następnie przekonwertować
Lub w przygotowaniu
źródło
... | csvtranspose | ...
to tylko pod względem składniowym.Szybkie i brudne rozwiązanie bash :
źródło
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
komórka jest zakodowana"this ""is"" example"
Nie jestem przekonany, czy to rozwiązanie odpowiednio obsługuje takie przypadkiBiorąc pod uwagę sugerowane ograniczenie (bez cudzysłowu, bez osadzonych przecinków), jest on prosty w awk (tak jak w perlu, nie biorąc pod uwagę ponad tysiąca linii w
CSV.pm
, 2300 linii wcsv.rb
- python ma tylko 450 linii wcsv.py
).Oto przykład awk:
Nawiasem mówiąc: podany przykład miał dodatkową przestrzeń, która, jak zakładano, zostanie usunięta; inne przykłady nie dotyczyły tego szczegółu.
źródło