parâmetro split do awk por char

1
O arquivo

é:

BASH.NIR
SH.ABI

Eu quero que o script awk apareça:

User is NIR, SHELL is BASH
User is ABI, SHELL is SH

Eu não sei dividir um parâmetro por char. A ideia é:

cat file.txt | awk '{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}'
    
por Nir 22.12.2013 / 16:07

2 respostas

3

Você pode usar as funções de string em awk .

$ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk '{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}'
User is NIR, SHELL IS BASH
User is ABI, SHELL IS SH

A função index retorna a posição do caractere a ser encontrado (neste caso, um ponto). E strstr retornará uma substring. Usamos p+1 e p-1 para não incluir o ponto.

Para obter mais informações, consulte a seção "Funções de string" da página awk .

    
por 22.12.2013 / 18:38
6

Você pode usar apenas . como o separador de campo:

awk -F. '{ print "User is " $2 ", SHELL is " $1 }' file.txt
    
por 22.12.2013 / 16:09