como usar variável com awk [duplicado]

1

temos o seguinte arquivo

 cat  /tmp/hive.conf

      "hive-exec-log4j2" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-interactive-env" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-interactive-site" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-log4j" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-log4j2" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },

queremos capturar a linha depois da partida do "hive-log4j" do arquivo

então nós entendemos isso:

cat  /tmp/hive.conf |  awk  '/"hive-log4j"/{getline; print}'
        "tag" : "TOPOLOGY_RESOLVED",

agora queremos fazer o mesmo com o awk e exportar a variável como a seguir

 val="hive-log4j"
 cat  /tmp/hive.conf |  awk -v var=$val '/"var"/{getline; print}' 

mas sem saída

o que há de errado com minha sintaxe?

    
por yael 05.08.2018 / 14:44

1 resposta

0

/.../ é uma constante de expressão regular, tentando corresponder a string "var" , não var . Experimente

awk -v var=$val '$0 ~ var {getline; print}' file

ou

awk -v var=$val 'match ($0, var) {getline; print}' file

Certifique-se de que a variável shell contenha as aspas duplas, pois elas fazem parte do padrão. Se isso não for possível, tente

awk -v var=$val 'match ($0, "\"" var "\"") {getline; print}' file
    
por 05.08.2018 / 14:57