Ich versuche, tr mit mehreren Sätzen zu verwenden, bin mir aber nicht sicher, wie
Frage
Ich habe benutzt:
tr -dc [:alpha:] < $fileDoc | wc -c
alle Buchstaben zählen,
tr -dc ' ' < $fileDoc | wc -c
alle Leerzeichen zählen,
tr -dc '\n' < $fileDoc | wc -c
um alle neuen Zeilen in einem Textdokument zu zählen.
Was ich jetzt tun möchte, ist, alle anderen Zeichen im Dokument zu zählen, wie ich alles andere nennen werde.
Hier ist der Text aus dem Dokument:
Hallo, das ist ein Testtextdokument.
123
!@#
Gibt es eine Möglichkeit, alles zu löschen? [:alpha:]
, , Und
\n
gefunden und die restlichen Zeichen zählen?
Lösung
Das sollte den Zweck erfüllen
tr -d '[:alpha:] \n' < $fileDoc | wc -c
Oder vielleicht, wenn Sie Tabulatoren in die Definition von Leerzeichen einbeziehen möchten
tr -d '[:alpha:][:space:]' < $fileDoc | wc -c
Basierend auf dem Kommentar des OP, um alphabetische Buchstaben, Leerzeichen, Ziffern und Zeilenumbrüche zu löschen und alle verbleibenden Zeichen zu zählen:
tr -d '[:alnum:][:space:]' < $fileDoc | wc -c
[:alnum:]
berücksichtigt Buchstaben und Ziffern. [:space:]
kümmert sich um alle Leerzeichen, einschließlich Zeilenumbrüche
Andere Tipps
Ich poste hier nur als Referenz. Wenn Sie alles auf einmal erledigen möchten, dann hier awk
Das Skript sollte funktionieren:
awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot
$ awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4