eu tenho essa linha
word1 word2 1234 4567 word3 8901 word4 word5 2541 5142 word5
Eu quero dividir esta linha para inserir uma quebra de linha antes de um campo numérico ou antes de um campo alfanumérico que esteja logo após um campo numérico, então a saída seria:
word1 word2
1234
4567
word3
8901
word4 word5
2541
5142
word5
Todos os campos alfanuméricos começam com letras
Explicação:
perl -pe
: execute o seguinte script Perl em cada linha de entrada e imprima os resultadoss/(\s)([0-9]+)/$1\n$2/g
: espaço em branco + campo numérico -> espaço em branco + nova linha + campo numéricos/(\s)([0-9]+)(\s+)([a-zA-Z])/$1$2\n$4/g
: espaço em branco + campo numérico + espaço em branco + campo alfanumérico -> espaço em branco + campo numérico + nova linha + campo alfanuméricog
no final de cada substituição significa 'global' - faça isso para toda a linhaColoque o seguinte código em um script awk. Digamos que o script seja chamado
do_magic.awk
Chame o script usando
do_magic.awk yourfile
Resultado é:
PS: Eu tinha de alguma forma uma solução de trabalho que pensei. No freenode #awk,
geirha
forneceu a resposta completa. Então os créditos vão para ele!Parece que você deseja preservar espaços entre palavras alfanuméricas e converte todas as outras em novas linhas, então talvez: