Impressão de campo Awk dentro do operador ternário

2

Se você estiver familiarizado com DISTI STIGs , o teste para RHEL-06-000518 é

/bin/rpm -Va 2>/dev/null \
  | /bin/grep '^.M'

O que eu quero fazer é retirar apenas o nome do arquivo desse teste e fazer uma boa saída com o nome do pacote e o arquivo incorreto. No entanto, meu awk não está fazendo isso. Aqui está o que estou tentando:

/bin/rpm -Va 2>/dev/null \
  | grep '^.M' \
  | awk '{print ($2 ~ /./ ? $3 : $2)}'

que, em teoria, diz ao awk para imprimir o campo 3 se o campo 2 for um dos tipos de arquivo de caractere único (% config,% documentation, etc., veja o página de manual do rpm )

No entanto, o que obtenho é o nome do arquivo if-and-only-if ($ 2 ~ /./). Caso contrário, acabei de receber uma linha em branco, mesmo que eu substitua $ 0 por essa $ 2 final.

O que estou perdendo?

    
por dafydd 08.04.2016 / 19:05

1 resposta

4

Seu teste $2 ~ /./ é sempre verdadeiro, exceto quando $2 é a string vazia, ou seja, quando há 0 ou 1 campo na linha. Você deve tentar $2 ~ /^.$/ .

Você também pode combinar o grep e o awk em um:

 awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'
    
por 08.04.2016 / 19:25

Tags