Alle Zeilen mit der Zeichenfolge finden - zusammenfassen und zählen

Alle Zeilen mit der Zeichenfolge finden - zusammenfassen und zählen

Ich habe viele Dateien in mehreren Unterordnern, die eine Zeichenfolge enthalten type="abc_. Ich bin nicht sicher, wie viele Varianten abc_es davon gibt. Deshalb möchte ich wissen, wie oft das Unbekannte type="abc_in meinen Dateien vorkommt.

Ich hoffe, etwas zu bekommen, das wie eine Zeile aussieht, die enthält

"type="abc_0815 found 50 times
"type="abc_0816 found 32 times
...

and so on.

Wenn mir das gefällt:

grep -rni 'type="abc_' * | wc

Ich kenne seine 14905 Vorkommen mit bereits type="abc_.

Kann mir jemand dabei helfen?

Antwort1

Dies wird verwendet find, um eine Dateiliste abzurufen, diese weiterzuleiten catund die Ausgabe mit folgendem Befehl zu analysieren 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.

Es verwendet „Find“ anstelle von „Simple“, cat *um flexibler bei der Suche zu sein.

xargs .. cat | ..kann verkürzt werden mitfind . -type f -exec cat {} + | awk ..

Antwort2

Fügen Sie einfach -cein Flag hinzu, damit Grep es für Sie zählt.

Falls zu viele 0-Ergebnisse vorhanden sind, filtern Sie diese mit awk heraus

  grep -rnic 'type="abc_' * | awk -F: '$NF>0' 

Antwort3

Versuchen Sie Folgendes:

grep -rni 'type="abc_' * |sed -n "s/.*\(abc_[0-9]*\).*/\1/p"|uniq -c| sed  "s/\(.*\)\(abc.*\)/\2 found \1 times/"

verwandte Informationen