Dado um arquivo como esse
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Existe um utilitário de linha de comando para transpor o conteúdo para que a saída apareça assim
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Cory Klein
fonte
fonte
python
, b)ruby
não é menos portátil do quepython
ec) mostra também como passar a entrada / saída arquivos. Bravo @luikore, e bem-vindo ao Unix e Linux. Por favor, fique por aqui.A análise de CSV não é feita facilmente apenas com as ferramentas POSIX, a menos que você esteja usando uma variante simplificada de CSV sem aspas (para que vírgulas não possam aparecer em um campo). Mesmo assim, essa tarefa não parece fácil de ser feita com o awk ou outro processamento de texto na ferramenta. Você pode usar Perl com
Text::CSV
, Python comcsv
, R comread.csv
, Ruby com CSV ,… (Tudo isso faz parte da biblioteca padrão da respectiva linguagem, exceto Perl.)Por exemplo, em Python:
fonte
Em /programming//a/2776078 :
E depois converter
Ou no pipeline
fonte
... | csvtranspose | ...
iria superar isso, em termos de sintaxe.Uma solução rápida e suja do bash :
fonte
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
celular é codificado"this ""is"" example"
Não estou convencido se esta solução alças tais casos corretamenteDada a limitação sugerida (sem citação, sem vírgulas incorporadas), é simples no awk (como seria em perl, não levando em conta mais de mil linhas em
CSV.pm
, 2300 linhas emcsv.rb
- python tem apenas 450 linhas emcsv.py
).Aqui está um exemplo para o awk:
A propósito: o exemplo dado tinha espaço extra que o OP assumiu que seria removido; os outros exemplos não abordaram esse detalhe.
fonte