Exibindo "Nenhum resultado" quando o comando AWK não tem saída

1

Eu tenho o seguinte código, obrigado às pessoas que me ajudaram aqui

awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd

No entanto, eu era bobo e não expliquei todo o meu problema. Em vez de mudar a questão sobre as pessoas, imaginei abrir uma nova pergunta.

Meu objetivo é gerar uma lista de usuários que tenham um diretório inicial configurado em / etc / passwd que aponte para uma pasta que não existe. (O código acima faz isso com sucesso).

O problema que estou enfrentando agora é que gostaria de exibir "Nenhum resultado" em vez de uma página em branco, se cada usuário tiver, de fato, um diretório inicial que exista.

Por exemplo, se eu executar esse código em um sistema RHEL padrão, recebo a seguinte saída:

# awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
The directory /var/adm does not exist for user adm
The directory /var/spool/uucp does not exist for user uucp
The directory /var/gopher does not exist for user gopher
The directory /var/ftp does not exist for user ftp
The directory /var/empty/saslauth does not exist for user saslauth

Os usuários listados acima, realmente não importam, porque não podem fazer login, por isso, gostaria de atualizar meu código para ter uma conta como esta:

awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd

Isso funciona como esperado e nenhum resultado é exibido, mas eu realmente quero que ele exiba "Sem resultados", em vez de não exibir nada. (Isso pode parecer um requisito tolo, mas eu vou estar usando este comando em uma ferramenta automatizada que funciona muito melhor se houver saída para olhar).

Eu pesquisei e encontrei alguns exemplos de uso do NR, mas não consegui fazer isso funcionar corretamente. Eu também vi || e echo "Nenhum resultado" em alguns tipos de comandos, mas também não parece conseguir isso funcionar.

O Google não tem me ajudado com outras opções, por isso agradeço muito sua ajuda!

    
por Doug 09.04.2015 / 00:41

1 resposta

3

Você poderia

  • use um bloco BEGIN para definir um sinalizador
  • desmarque o sinalizador quando seu teste atual encontrar um diretório ausente
  • verifique se o sinalizador ainda está definido em END e, se for o caso, imprima sua mensagem

por exemplo,

awk -F: '
BEGIN{nores=1;} 
{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1; nores=0 }} 
END{if (nores) print "No results";}
' /etc/passwd
    
por 09.04.2015 / 01:20