webentwicklung-frage-antwort-db.com.de

Anzahl der Zeichen in einer Datei durch Shell-Skript zählen

Ich möchte die Anzahl der Zeichen in einer Datei auf EOF Zeichen prüfen. Kann mir jemand sagen, wie ich das mit einem Shell-Skript erledigen kann

58
Shweta

Das wird es tun:

wc -c filename

Wenn Sie nur die Zählung möchten, ohne dass der Dateiname in der Ausgabe wiederholt wird:

wc -c < filename

Bearbeiten:

Verwenden Sie -m, um Zeichen anstelle von Bytes zu zählen (wie in Sébastiens Antwort gezeigt).

89
#!/bin/sh

wc -m $1 | awk '{print $1}'

wc -m zählt die Anzahl der Zeichen; Der Befehl awk gibt nur die Anzahl der Zeichen aus, wobei der Dateiname weggelassen wird.

wc -c würde Ihnen die Anzahl der Bytes geben (die sich von der Anzahl der Zeichen unterscheiden kann, da je nach Kodierung möglicherweise ein Zeichen für mehrere Bytes codiert ist).

awk '{t+=length($0)}END{print t}' file3
4
Vijay

Um die genaue Zeichenanzahl der Zeichenfolge zu ermitteln, verwenden Sie printf im Gegensatz zu echo, cat oder wc -c direkt für eine Datei, da bei Verwendung von echo, cat usw. ein Zeilenvorschubzeichen gezählt wird, wodurch Sie die Anzahl der Zeichen einschließlich erhalten der Newline-Charakter. Eine Datei mit dem Text 'Hallo' wird also 6 gedruckt, wenn Sie Echo usw. verwenden. Wenn Sie jedoch printf verwenden, wird die exakte 5 zurückgegeben, da kein Zeilenumbruchelement zählt.

So verwenden Sie printf zum Zählen von Zeichen in Zeichenfolgen:

$printf '6chars' | wc -m
6

Um daraus ein Skript zu machen, das Sie für eine Textdatei ausführen können, um Zeichen zu zählen, speichern Sie Folgendes in einer Datei namens print-character-amount.sh:

#!/bin/bash
characters=$(cat "$1")
printf "$characters" | wc -m

chmod + x in der Datei print-character-amount.sh, die den obigen Text enthält, platzieren Sie die Datei in Ihrem PATH (d. h./usr/bin/oder einem beliebigen Verzeichnis, das als PATH in Ihrer .bashrc-Datei exportiert wird) und führen Sie dann das Skript nach Textdateityp aus:

print-character-amount.sh file-to-count-characters-of.txt
3
user.py

nur awk

awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file

Nur Shell

var=$(<file)
echo ${#var}

Rubin (1.9+)

Ruby -0777 -ne 'print $_.size' file
1
kurumi

Das folgende Skript wird getestet und liefert genau die Ergebnisse, die erwartet werden

\#!/bin/bash

echo "Enter the file name"

read file

echo "enter the Word to be found"

read Word

count=0

for i in \`cat $file`

do

if [ $i == $Word ]

then

count=\`expr $count + 1`

fi

done

echo "The number of words are $count"
0
Paresh

Ich hätte gedacht, dass es besser wäre, stat zu verwenden, um die Größe einer Datei zu ermitteln, da das Dateisystem dies bereits weiß, und nicht, dass die gesamte Datei mit awk oder wc gelesen werden muss. GB-Datei oder eine Datei, die möglicherweise nicht im Dateisystem eines HSM gespeichert ist.

stat -c%s file

Ja, ich gebe zu, dass es keine Multi-Byte-Zeichen berücksichtigt, aber hinzugefügt werden sollte, dass das OP nie geklärt hat, ob dies ein Problem ist/war. 

0
Mark Setchell

Danksagungen an user.py et al.


echo "ää" > /tmp/your_file.txt
cat /tmp/your_file.txt | wc -m

ergibt 3.

In meinem Beispiel wird erwartet, dass das Ergebnis 2 ist (zweimal der Buchstabe ä). Echo (oder vi) fügt jedoch am Ende der Ausgabe (oder der Datei) einen Zeilenumbruch \n hinzu. Es werden also zwei ä und ein Linux-Zeilenumbruch \n gezählt. Das sind drei zusammen.

Das Arbeiten mit Pipes | ist nicht die kürzeste Variante, aber ich muss weniger wc-Parameter auswendig kennen. Außerdem ist cat nach meiner Erfahrung kugelsicher.

Getestet auf Ubuntu 18.04.1 LTS (Bionic Beaver).

0
qräbnö