parâmetro de divisão do awk por char

arquivo é:

BASH.NIR SH.ABI 

Eu quero o script do awk para mostrar:

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

Não sei como dividir um parâmetro por char. A ideia é:

cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}" 

Resposta

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 awk página de manual.

Resposta

Você pode apenas usar . como separador de campo:

awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt 

Comentários

  • o arquivo de texto pode ser Também tem espaços em branco
  • @nir Por favor, cole uma amostra de sua entrada exata em sua pergunta, não posso ' adivinhar o que parece como, a menos que você o represente corretamente.
  • @nir – ' é sempre melhor incluir dados de exemplo reais. Dados inventados geralmente apenas desperdiçam o tempo da resposta ', pois geralmente levam às soluções erradas.
  • você está certo, fará a forma na próxima vez.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *