13

Я использовал команду wc -c для подсчета количества символов, но в качестве примера я получил неправильное число, число символов плюс один:

echo "k" | wc -c 

это дает мне 2 символа

так почему не 1?

3 ответа3

17

Посмотрите на справочное сообщение для 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) в этом порядке.

11

когда вы 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
5

Это потому, что вы используете echo (который имеет возврат каретки), вместо этого используйте printf:

$ echo k | wc -c 2

$ printf k | wc -c 1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .