Ich habe den Befehl wc -c verwendet, um die Anzahl der Zeichen zu zählen, aber es gibt mir eine falsche Anzahl, Anzahl der Zeichen plus eins als Beispiel:
echo "k" | wc -c
Es gibt mir 2 Zeichen
also warum nicht 1?
Ich habe den Befehl wc -c verwendet, um die Anzahl der Zeichen zu zählen, aber es gibt mir eine falsche Anzahl, Anzahl der Zeichen plus eins als Beispiel:
echo "k" | wc -c
Es gibt mir 2 Zeichen
also warum nicht 1?
Antworten:
Schauen 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 wcdie Zeilenvorschubzeile angezeigt wird, zählt sie als ein anderes Zeichen und daher als zusätzliche Anzahl 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 von wcto awkleiten, um die Anzahl der Zeichen abzurufen, mit Ausnahme der Zeilenvorschubzeichen:
wc <filename> | awk '{print $3-$1}'
Die Standardausgabe von wcohne Optionen gibt die Anzahl der Zeilenumbrüche ($ 1 bis awk), die Anzahl der Wörter und die Anzahl der Zeichen ($ 3 bis awk) in dieser Reihenfolge aus.
echo -n "k" | wc -c. Das macht Sinn
printfwird oft vorgezogen, echowenn Konsistenz wichtig ist. Es ist nicht eine neue Zeile gedruckt werden, es sei denn ausdrücklich darum gebeten, so printf "k" | wc -mgibt 1, dh die Anzahl der Zeichen gedruckt. Um Zeichen in der ersten Zeile einer Datei zu zählen, kann man tun , zB $(($(head -1 file | wc -m)-1))(wickeln Sie es in $(())Hülle Arithmetik zu tun , um die Newline - Zählung zu entfernen) oder noch besser: Verwendung awk und tut awk 'NR==1{print length}' file.
Wenn Sie dies tun, hängt echo "k"der echoBefehl ein Zeilenumbruchzeichen an das, was Sie zum Ausdrucken aufgefordert haben ("k"). Sie können die -nOption verwenden, um dies zu deaktivieren:
echo -n k | wc -c
1
Für diese Betrachtung unsichtbaren Zeichen, könnten Sie Dump - Stream WHITH ododer 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
-cOption ist eine