EDITAR :
Crie um arquivo, chame como quiser e copie o script awk abaixo dele. chmod +x scriptname.awk
para torná-lo executável.
#!/usr/bin/awk -f
BEGIN {var_num=0}
/VARIABLES/,/}/ {
sub("{","");
sub("}","");
sub("VARIABLES","");
if ($0~/[[:alpha:]],/||/[[:alpha:]]/)var_num+=1
}
/DESCRIPTION/{
getline; printf "%s,",$0
}
/::=/ {
printf $2","
}
END{ printf var_num }
Agora aqui está o meu exemplo de executar o script:
$ IFS=","; ARRAY=($(./three-lines.awk test-text.txt | xargs echo ))
$ echo ${ARRAY[0]}; echo ${ARRAY[1]}; echo ${ARRAY[2]}
SNMP Agent is up.
101
5
Efetivamente, isso cria uma matriz de 3 elementos, e esses elementos são o que o awk script extrai de um arquivo. Regex [[: alpha:]] é usado para considerar sequências alfabéticas e seqüências alfabéticas com comas como variáveis, portanto var_num é incrementado; se não houver linhas que correspondam a esse padrão, var_num não é incrementado
ORIGINAL
Aqui está o meu one-liner awk:
awk 'BEGIN {var_num=0} /VARIABLES/,/}/ {sub("{","");sub("}","");sub("VARIABLES",""); var_num+=1} END{ print var_num}' test-text.txt
Idéia básica: crie a variável var_num
, diga ao awk para ler tudo entre as linhas que contêm VARIABLES string e chave retangular}. Livre-se dessa string, de todas as chaves e temos apenas strings que representam variáveis. Adicione 1 para cada linha a var_num
. No final - imprima o total de variáveis contadas.
O motivo da exclusão de VARIABLES e chaves é que não queremos contar linhas que contenham apenas string VARIABLE ou a chave. Então, precisamos ter certeza de que eles foram embora.
Outro padrão que notei é que cada variável é separada por coma. Assim, você poderia usar uma instrução if, algo como if ($0~/,/) { var_num+=1 }