Назад | Перейти на главную страницу

Почему `wc -c` всегда учитывает еще 1 символ?

в tmp Я набираю один символ, но wc -c показывает 2,Зачем?

Потому что новые строки - это тоже символы. Скажите текстовому редактору не добавлять его в конец файла. Нет, не знаю как.

Один из способов - tr чтобы удалить новые строки, вы можете подсчитать символы.

Стандартное поведение:

echo HELLO | wc -m
# result: 6
echo -n HELLO | wc -m
# result: 5

Чтобы показать количество найденных символов новой строки:

echo HELLO | wc -l
# result: 1
echo -n HELLO | wc -l
# result: 0

Удалите символ новой строки и подсчитайте символы:

echo HELLO | tr -d '\n' | wc -m
# result: 5

Удалите символ новой строки (и возможные возвраты с помощью \r) и подсчитываем символы для входного файла:

tr -d '\n\r' < input.txt | wc -m

Я использовал для своих расчетов предложение, аналогичное предложению the-wabbit.

В качестве обходного пути вы можете подсчитать новые строки с помощью wc -l и вычесть их из счетчика wc -c.

function num_chars () {
    # echo -e tells echo to honor certain sequences like \n
    chars=$(echo -e "${1}" | wc -c)
    lines=$(echo -e "${1}" | wc -l)
    real_chars=$(echo "$chars - $lines" | bc)
    echo "$real_chars"
}

num_chars "hello Dolly"
11 #Result
num_chars "hello
dolly"
11 #Result
num_chars "hello \nDolly"
11 #Result