Transformar colunas em linhas em um arquivo

Fevereiro 2017


Diferentes ferramentas do Linux são muito apropriadas para trabalhar com as linhas, mas não com colunas (é o seu papel) Sed, Awk, Grep, etc.

No entanto, pode acontecer por n razões que você tenha um arquivo onde os dados são lidos em colunas.

Um exemplo simples:
$ cat in.txt 
2008-09-21|2008-09-22|2008-09-23 
Domingo|Segunda feira|terça feira

Solução


Eis um método « simples » para transformar este arquivo em um arquivo de 3 linhas de duas colunas (data|nome do dia)
$ split -l1 in.txt tmp_ 
$ sed -i 's/|/\x0A/g' tmp_ 
$ paste -d'|' tmp_* >out.txt 
$ rm -f tmp_* 
$ cat out.txt 
2008-09-21|Domingo 
2008-09-22|Segunda feira
2008-09-23|Terça feira 
De uma olhadela nas páginas man do split e paste, são dois comandos simples, mas muito práticos.

Limitações

  • Sob esta forma, o script não funcionará a não ser se o número de linhas em entrada for inferior à 676. Isto se deve ao sufixo adicionado pelo comando split que tem como padrão 2 caracteres, mas em caso de necessidade, a opção -a permite aumentar este limite.
  • Para o comando sed (que pode ser mudado por outros comandos bastante simplesmente) de acordo com sa versões , dois problemas podem acontecer:
    • A opção -i exige um sufixo (.bak, ou outro)neste caso, é preciso ter cuidado em modificar o comando paste para considerar somente os arquivos gerados por split e não aqueles por sed (tmp_?? por exemplo)
    • A versão não suporta a notação octogonal '\012' ou hexadecimal '\x0A'neste caso, o mais simples que eu encontrei, é de escapar a volta do cursor como segue : digitar um backslash, depois as <Ctrl+V> <Ctrl+J>(ou pressionar em Entre), depois terminar o comando.



Tradução feita por Ana Spadari

Veja também

Artigo original publicado por . Tradução feita por ninha25. Última modificação: 29 de julho de 2011 às 08:46 por ninha25.
Este documento, intitulado 'Transformar colunas em linhas em um arquivo ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.