Учитывая файл, как так
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Есть ли утилита командной строки для транспонирования содержимого, чтобы вывод выглядел так
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Кори Кляйн
источник
источник
python
, б)ruby
не менее переносим, чемpython
, и в) это также показывает, как передать ввод / вывод файлы. Браво @luikore, и добро пожаловать в Unix & Linux. Пожалуйста, не торопись.Синтаксический анализ CSV нелегко выполнить только с помощью инструментов POSIX, если только вы не используете упрощенный вариант CSV без кавычек (чтобы запятые не могли появляться в поле). Даже тогда эта задача не кажется простой для выполнения с помощью awk или другой обработки текста в инструменте. Вы можете использовать Perl с
Text::CSV
, Python сcsv
, R сread.csv
, Ruby с CSV ,… (Все это является частью стандартной библиотеки соответствующего языка, за исключением Perl.)Например, в Python:
источник
С /programming//a/2776078 :
А потом конвертировать
Или в конвейере
источник
... | csvtranspose | ...
побил бы это, с точки зрения синтаксиса.Быстрое и грязное решение для bash :
источник
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
ячейка закодирована."this ""is"" example"
Я не уверен, что это решение правильно обрабатывает такие случаиУчитывая предлагаемое ограничение (без кавычек, без встроенных запятых), это просто в awk (как это было бы в perl, не принимая во внимание более тысячи строк в
CSV.pm
, 2300 строк вcsv.rb
- в python только 450 строкcsv.py
).Вот пример для awk:
Кстати: в данном примере было дополнительное пространство, которое, как предполагал OP, будет удалено; другие примеры не касались этой детали.
источник