awk + como contar linhas com estrutura específica

0

Como faço para usar awk para contar todas as linhas que seguem a seguinte estrutura:

"any-string" : "any-string"

Por exemplo

      "ssl.server.keystore.type" : 
      "mapred-logsearch-conf" : {
      "hive.server2.thrift.sasl.qop" : "auth",
      "hive.merge.orcfile.stripe.level" : "true",
      "hive.orc.splits.include.file.footer" : "false",
      "hive.exec.compress.output" : "false",
      "hive.user.install.directory" : "/user/",
      "hive.prewarm.enabled" : "false",
      "hive.compactor.delta.num.threshold" : "10",
      "hive.orc.compute.splits.num.threads" : "10",
      "hive.vectorized.groupby.checkinterval" : "4096",
      "properties_attributes" : { },

produziria a saída "9".

    
por jango 16.08.2017 / 11:25

2 respostas

1

Como você pergunta um código awk , aqui está um deles:

awk '/"[^"]*"[[:space:]]*:[[:space:]]*"[^"]*"/ { n++ } END { print n }'

Mas grep é mais apropriado para isso:

grep -c '"[^"]*"[[:space:]]*:[[:space:]]*"[^"]*"'
    
por 16.08.2017 / 11:33
0

Para imprimir linhas combinadas, use o comando print dentro do bloco correspondente. O exemplo abaixo faz a impressão e a contagem -:

awk '/\".*\"[[:blank:]]*:[[:blank:]]*\".*\"/{print;n++} END{print n}'

ps - você deve atualizar sua pergunta sobre o requisito de impressão.

    
por 16.08.2017 / 12:03

Tags