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 -c
Option gibt die Anzahl der Zeichen aus. Der echo
Befehl enthält standardmäßig ein Zeilenumbruchzeichen. Wenn wc
das 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; -w
zählt die Anzahl der Wörter und -l
zählt die Anzahl der Zeilen.
echo "k" | wc -w
echo "k" | wc -l
Sie können die Ausgabe umleiten, wc
um awk
die Anzahl der Zeichen ohne die Zeilenumbruchzeichen zu erhalten:
wc <filename> | awk '{print $3-$1}'
Die Standardausgabe wc
ohne 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 echo
Befehl an die Ausgabe, die Sie drucken möchten, ein Zeilenumbruchzeichen an ("k"). Sie können -n
dies mit der Option deaktivieren:
echo -n k | wc -c
1
Zum Anzeigen diesesunsichtbarod
Zeichen, 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 printf
stattdessen:
$ echo k | wc -c
2
$ printf k | wc -c
1