Dividir colunas com base em padrões em campos

3

Exemplo: gostaria de dividir $2 no arquivo de entrada, colocando um tab após o padrão surname

Entrada:

name    surname1    
name    surname30000
name    surname456

Saída desejada:

name    surname    1
name    surname    30000
name    surname    456
    
por dovah 13.11.2015 / 12:02

4 respostas

2

Uma alternativa awk :

awk 'match($2,/[0-9]+$/) {printf("%s\t%s\t%s\n", $1, substr($2,0,RSTART), substr($2,RSTART,RLENGTH))}' filename

Isso corresponderá apenas à string numérica no final da segunda coluna.

    
por 13.11.2015 / 14:05
2

Você pode pesquisar o primeiro dígito e substituí-lo por uma guia seguida do dígito usando:

sed 's/[0-9]/\t&/' file
    
por 13.11.2015 / 12:19
2
sed -e 's/\([0-9]\)/\t/' input.txt

adiciona um separador antes do primeiro dígito em todas as linhas.

Saída:

name    surname 1    
name    surname 30000
name    surname 456
    
por 13.11.2015 / 12:19
2

Os dados podem estar em uma coluna específica, por exemplo, 16:

sed -e 's/^\(.\{15,15\}\)/ /'

Como alternativa, os dados de interesse no terceiro campo podem não ser numéricos:

sed -e 's/^\([[:alpha:]]\+[[:space:]]\+\)\([[:alpha:]]\+\)/ /'

Qualquer um deles colocará um espaço antes dos dígitos (ou outros caracteres não alfabéticos) nos dados.

Para referência:

por 13.11.2015 / 12:28