Ho usato il comando wc -c per contare il numero di caratteri ma mi dà un numero errato, numero di caratteri più uno come esempio:
echo "k" | wc -c
mi dà 2 personaggi
quindi perché non 1?
Ho usato il comando wc -c per contare il numero di caratteri ma mi dà un numero errato, numero di caratteri più uno come esempio:
echo "k" | wc -c
mi dà 2 personaggi
quindi perché non 1?
Risposte:
Dai un'occhiata al messaggio di aiuto per wc. L' -copzione stampa il numero di caratteri. Il echocomando include un carattere di nuova riga per impostazione predefinita. Quando wcvede la newline la conta come un altro personaggio e quindi il conteggio aggiuntivo nel tuo risultato. Puoi aggirare questo usando una delle alternative mostrate di seguito; -wconta il numero di parole e -lconta il numero di righe.
echo "k" | wc -w
echo "k" | wc -l
È possibile reindirizzare l'output di wcto awkper ottenere il numero di caratteri esclusi i caratteri di nuova riga:
wc <filename> | awk '{print $3-$1}'
L'output predefinito wcsenza opzioni stampa il numero di caratteri di nuova riga (da $ 1 a awk), il numero di parole e il numero di caratteri (da $ 3 a awk) in questo ordine.
echo -n "k" | wc -c. Questo ha senso
printfè spesso preferito prima echoquando la coerenza è importante. Non stampa una nuova riga a meno che non sia stato espressamente richiesto, quindi printf "k" | wc -mindica 1il numero di caratteri stampati. Per contare i caratteri nella prima riga di un file, si può fare ad es. $(($(head -1 file | wc -m)-1))(Avvolgerlo $(())per eseguire l'aritmetica della shell per rimuovere il conteggio della nuova riga) o anche meglio: usare awk e do awk 'NR==1{print length}' file.
quando lo fai echo "k", il echocomando aggiunge un carattere di nuova riga a qualunque cosa tu gli abbia chiesto di stampare ("k"). È possibile utilizzare l' -nopzione per disabilitare questo:
echo -n k | wc -c
1
Per visualizzare quel personaggio invisibile , puoi scaricare lo stream con odo 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
-copzione è un conteggio dei byte, non un conteggio dei caratteri