Aninhamento de Awk e comparação de variáveis [duplicado]

1

Eu me encontrei tendo que aprender um pouco de awk, e é muito legal, mas eu tenho um pequeno problema que estou enfrentando.

Eu tenho um script que tem uma saída projetada para ser canalizada. Vamos chamar de matriz.

Eu também tenho um arquivo de texto local blacklist.txt sobre o qual eu tenho controle completo e posso formatar qualquer forma que eu quiser. Ele contém apenas 1 coluna (ou um conjunto de valores)

Eu quero executar o script, canalizá-lo, comparar um dos valores da coluna resultante com cada valor de linha (ou separado por vírgulas) no arquivo de texto e se for uma correspondência que esteja executando outra coisa.

Eu quero executar o seguinte (com algum pseudo código):

matrix username |    // this returns an output and is piped
// I then want to awk in a blacklist of usernames from my file,
//not sure if I should use getline
awk '{print $1}' blacklist.txt
// And now, I would like to compare the two, and execute another command
if($4 from matrix == $1 from blacklist.txt) {
  matrix doSomething
}
else {
  print "Not valid"
}

Todos os ponteiros seriam muito apreciados. Obrigado.

    
por user1202888 17.11.2015 / 04:37

1 resposta

1

Isso pode ser feito usando dois recursos de awk :

    Matrizes
  1. são indexadas por strings
  2. a variável incorporada FILENAME

Esse script assume os separadores de campo padrão e esse blacklist.txt contém um campo por linha. Ajuste de acordo com suas necessidades.

#!/bin/sh

awk '
    FILENAME == "blacklist.txt" {
        blacklist[$0] = 1
        next
    }
    blacklist[$4] {
        print $4, $0
    }
' blacklist.txt -
    
por 17.11.2015 / 05:13