Я использовал команду wc -c для подсчета количества символов, но в качестве примера я получил неправильное число, число символов плюс один:
echo "k" | wc -c
это дает мне 2 символа
так почему не 1?
Я использовал команду wc -c для подсчета количества символов, но в качестве примера я получил неправильное число, число символов плюс один:
echo "k" | wc -c
это дает мне 2 символа
так почему не 1?
Посмотрите на справочное сообщение для wc
. Опция -c
выводит количество символов. Команда echo
по умолчанию включает символ новой строки. Когда wc
видит символ новой строки, он считается как другой символ и, следовательно, дополнительный счет в вашем результате. Вы можете обойти это, используя одну из альтернатив, показанных ниже; -w
подсчитывает количество слов, а -l
подсчитывает количество строк.
echo "k" | wc -w
echo "k" | wc -l
Вы можете передать вывод wc
в awk
чтобы получить количество символов, исключая символы новой строки:
wc <filename> | awk '{print $3-$1}'
Вывод wc
умолчанию без параметров выводит количество символов новой строки (от $ 1 до awk), количество слов и количество символов (от $ 3 до awk) в этом порядке.
когда вы echo "k"
, команда « echo
добавляет символ новой строки к тому, что вы попросили его распечатать ("k"). Вы можете использовать опцию -n
чтобы отключить это:
echo -n k | wc -c
1
Для просмотра этого невидимого символа вы можете сбросить поток с помощью od
или 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
Это потому, что вы используете echo (который имеет возврат каретки), вместо этого используйте printf:
$ echo k | wc -c 2
$ printf k | wc -c 1