Tengo muchos archivos en varias subcarpetas que incluyen una cadena type="abc_
(no estoy muy seguro de cuántas variantes abc_
hay), por lo que quiero saber cuántas apariciones de lo desconocido type="abc_
hay en mis archivos.
Espero obtener algo que sea como una línea que contenga
"type="abc_0815 found 50 times
"type="abc_0816 found 32 times
...
and so on.
Si me gusta eso:
grep -rni 'type="abc_' * | wc
Ya conozco sus 14905 apariciones con type="abc_
.
¿Alguien puede ayudarme con eso?
Respuesta1
Esto se utiliza find
para obtener una lista de archivos, se la pasa cat
y analiza la salida con awk
:
find . -type f |
xargs -I xx cat "xx" | awk '/type="abc_/{
for(i=1;i<=NF;i++){
if($i~/type="abc_/){ d[$i]++ } } }
END{ for(i in d){ print i"\tfound",d[i],"times." } }'
type="abc_4 found 1 times.
type="abc_3 found 2 times.
type="abc_6 found 1 times.
type="abc_2 found 2 times.
type="abc_10 found 3 times.
type="abc_5 found 1 times.
Utiliza buscar en lugar de un simple cat *
para ser más flexible sobre qué buscar.
xargs .. cat | ..
se puede acortar confind . -type f -exec cat {} + | awk ..
Respuesta2
simplemente agregue -c
la bandera para que grep la cuente por usted.
En caso de que haya demasiados resultados 0, filtre con awk
grep -rnic 'type="abc_' * | awk -F: '$NF>0'
Respuesta3
Prueba algo parecido a esto:
grep -rni 'type="abc_' * |sed -n "s/.*\(abc_[0-9]*\).*/\1/p"|uniq -c| sed "s/\(.*\)\(abc.*\)/\2 found \1 times/"