Por ejemplo, queremos contar todos los caracteres de comillas ( "
); solo nos preocupamos si los archivos tienen más citas de las que deberían.
Por ejemplo:
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 previstos:
16
text-processing
yael
fuente
fuente
Respuestas:
Puede combinar
tr
(traducir o eliminar caracteres) conwc
(contar palabras, líneas, caracteres):(
-d
elija todos los caracteres en lac
ejecución de"
, y luego cuente losc
caracteres).fuente
enfoque grep :
-o
- salida solo subcadenas coincidentesO con un solo gawk :
RS=''
- separador de registro vacío (en lugar de nueva línea)FPAT='"'
- patrón que define el valor del campofuente
-o
es una extensión GNU no estándar de lagrep
utilidad estándar . No se menciona en la documentación POSIX paragrep
.Si dos líneas en el archivo tienen un número impar de comillas dobles, la suma total de comillas dobles será par y no detectará comillas desequilibradas (esto es lo que supongo que le gustaría hacer, pero podría estar equivocado )
Este
awk
script informa cualquier línea en la línea de entrada que tenga un número impar de comillas:Establecemos el separador de campo (
FS
)"
con lo-F'"'
que significa que si una línea tiene un número par de campos, tiene comillas impares.NF
es el número de campos en el registro reciente yNR
es el número ordinal del registro actual ("el número de línea").Dada la siguiente entrada:
obtenemos
Algo como
devolvería "14" para este archivo.
fuente
Otro
gawk
enfoque único :fuente
BASH puro:
fuente
tmp
una matriz? En caso afirmativo, ¿tmp
es una variedad de qué?tmp
en este fragmento hay una variable de shell normal. Y estoy rechazando esta respuesta porque esto cuenta el número de veces que aparece un carácter en una variable (var
) en lugar de en un archivo como se especifica en la pregunta.tratar:
sin embargo, esto no funcionará si dos o más caracteres en la misma línea. Se contarán como un personaje
fuente
grep -oF '"' archivo | wc -l
-F significa cuerda fija
fuente
-F
bandera, que no es necesaria aquí.Método excéntrico de doble GNU
grep
:fuente