Linux-Shell wc -c Zeichen zählen +1

Linux-Shell wc -c Zeichen zählen +1

Ich habe den Befehl wc -c verwendet, um die Anzahl der Zeichen zu zählen, aber er gibt mir eine falsche Zahl zurück, beispielsweise Anzahl der Zeichen plus eins:

echo "k" | wc -c 

es gibt mir 2 Zeichen

warum also nicht 1?

Antwort1

Sehen Sie sich die Hilfemeldung für an wc. Die -cOption gibt die Anzahl der Zeichen aus. Der echoBefehl enthält standardmäßig ein Zeilenumbruchzeichen. Wenn wcdas Zeichen für den Zeilenumbruch erkannt wird, zählt es als weiteres Zeichen und damit als zusätzliche Zahl in Ihrem Ergebnis. Sie können dies umgehen, indem Sie eine der unten gezeigten Alternativen verwenden; -wzählt die Anzahl der Wörter und -lzählt die Anzahl der Zeilen.

echo "k" | wc -w 
echo "k" | wc -l

Sie können die Ausgabe umleiten, wcum awkdie Anzahl der Zeichen ohne die Zeilenumbruchzeichen zu erhalten:

wc <filename> | awk '{print $3-$1}'

Die Standardausgabe wcohne Optionen druckt die Anzahl der Zeilenumbruchzeichen ($1 bis awk), die Anzahl der Wörter und die Anzahl der Zeichen ($3 bis awk) in dieser Reihenfolge aus.

Antwort2

Wenn Sie echo "k", hängt der echoBefehl an die Ausgabe, die Sie drucken möchten, ein Zeilenumbruchzeichen an ("k"). Sie können -ndies mit der Option deaktivieren:

echo -n k | wc -c
1

Zum Anzeigen diesesunsichtbarodZeichen, Sie könnten den Stream mit oder ausgeben hd:

echo k | od -t c
0000000   k  \n

echo k | hd
00000000  6b 0a                                             |k.|

echo k | od -t a -A n
   k  nl

Antwort3

Das liegt daran, dass Sie verwenden echo, wodurch Ihrem String eine neue Zeile hinzugefügt wird. Verwenden Sie printfstattdessen:

$ echo k | wc -c 
       2
$ printf k | wc -c
       1

verwandte Informationen