Eu tenho um arquivo de texto:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
Como posso processá-lo e obter um arquivo de 2 colunas como este:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Ou um arquivo de três colunas como este:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Eu prefiro obter a solução awk, mas outras soluções também são bem-vindas.
text-processing
awk
Apenas um aprendiz
fonte
fonte
$1
como string de formatoprintf
?"%s", ...
. Atualizadoawk
propósito, o mesmo se aplica ao comando da sua outra resposta a esta pergunta.Coloque cada campo em uma linha e pós-coluna.
Cada campo em uma linha
tr
grep
sed
ou mais portátil:
awk
ou
Columnate
colar
Para 2 colunas:
Para 3 colunas:
etc.
sed
Para 2 colunas:
Para 3 colunas:
etc.
xargs
Como
xargs
costuma/bin/echo
imprimir, lembre-se de que os dados que parecem opçõesecho
serão interpretados como tal.awk
pr
ou
colunas (do pacote autogen)
Saída típica:
fonte
xargs
linha não deveria ligarecho
ouprintf
?xargs
chamadas/bin/echo
por padrãoxargs
que parece opções para/bin/echo
causar problemas ... eu adicionei um aviso.fonte
Como o Wildcard apontou, isso só funcionará se o arquivo estiver bem formatado, pois não há caracteres especiais que o shell interprete como globs e você ficará satisfeito com as regras padrão de divisão de palavras. Se houver alguma dúvida sobre se seus arquivos serão "aprovados" nesse teste, não use essa abordagem.
Uma possibilidade seria usar
printf
para fazê-lo comoIsso fará a divisão de palavras no conteúdo
your_file
e os emparelhará e imprimirá com guias entre elas. Você pode usar mais%s
seqüências de formatoprintf
para ter colunas extras.fonte
(substitua 4 pelo número de colunas)
fonte
rs
Utilitário BSD (remodelar):0 2
é linhas e colunas . Especificar0
significa "calcular linhas automaticamente a partir de colunas".fonte
Abordagem de script Python.
A idéia básica aqui é achatar todas as palavras do seu texto em uma lista e, em seguida, imprimir uma nova linha após cada segundo item (para coluna em duas colunas). Se você quiser 3 colunas, mude
index%2
paraindex%3
Saída de amostra:
Versão de três colunas (como dito acima, apenas
index%3 == 0
alterada)fonte