/ etc / shadow & gawk

3

Eu executei este pequeno script em / etc / shadow:

awk '{ FS = ":" } { print $1, $2 }' /etc/shadow

Ele faz o que deve em todas as linhas, exceto no registro da raiz, ou seja, apenas imprime o registro inteiro. Sabe por quê?

Eu executei logado como root. Slackware do sistema. Kernel 3.2.29. Isso é bastante desconcertante, certo?

    
por Punit Arya 24.02.2014 / 18:45

2 respostas

6

O problema é que você define FS após awk ler a primeira entrada, então usará o valor padrão de FS , que é a space para o registro da raiz.

Você deve definir FS antes de awk ler qualquer entrada. Há muitas maneiras de fazer isso:

awk -F: '{print $1, $2}' /etc/shadow

ou:

awk '{print $1, $2}' FS=: /etc/shadow

ou:

awk 'BEGIN{FS=":"}{print $1, $2}' /etc/shadow
    
por 24.02.2014 / 18:56
3
cat  /etc/shadow | awk 'BEGIN {  FS = ":" } { print $1, $2 }'

Ou

awk 'BEGIN {  FS = ":" } { print $1, $2 }' /etc/shadow
    
por 24.02.2014 / 19:00

Tags