Por exemplo, queremos contar tudo quote ( "
) caracteres; apenas nos preocupamos se os arquivos tiverem mais aspas do que deveriam.
Por exemplo:
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"
resultados esperados:
16
text-processing
yael
fonte
fonte
Respostas:
Você pode combinar
tr
(traduzir ou excluir caracteres) comwc
(contar palavras, linhas, caracteres):(
-d
elimine todos os caracteres noc
suplemento de"
e conte osc
caracteres.)fonte
abordagem grep :
-o
- produz apenas substrings correspondentesOu com um único gawk :
RS=''
- separador de registros vazio (em vez de nova linha)FPAT='"'
- padrão que define o valor do campofonte
-o
é uma extensão GNU não padrão para ogrep
utilitário padrão . Não é mencionado na documentação do POSIX paragrep
.Se duas linhas no arquivo tiverem um número ímpar de aspas duplas, a soma total de aspas duplas será par e você não detectará aspas desequilibradas (é isso que eu presumo que você gostaria de fazer, mas posso estar errado )
Este
awk
script relata qualquer linha na linha de entrada que tenha um número ímpar de aspas:Definimos o separador de campo (
FS
) como"
com o-F'"'
que significa que, se uma linha tiver um número par de campos, ela terá aspas ímpares.NF
é o número de campos no registro recente eNR
é o número ordinal do registro atual ("o número da linha").Dada a seguinte entrada:
Nós temos
Algo como
retornaria "14" para este arquivo.
fonte
Outra
gawk
abordagem única :fonte
Pure BASH:
fonte
tmp
uma matriz? Se sim,tmp
é uma matriz de quê?tmp
neste trecho é uma variável de shell normal. E eu estou votando negativamente nesta resposta, porque isso conta o número de vezes que um caractere aparece em uma variável (var
) e não em um arquivo, conforme especificado na pergunta.experimentar:
no entanto, isso não funcionará se dois ou mais caracteres na mesma linha. Eles serão contados como um caractere
fonte
grep -oF '"' arquivo | wc -l
-F significa string fixa
fonte
-F
bandeira, que não é necessária aqui.Método GNU duplo excêntrico
grep
:fonte