Команда WC в linux

23.07.2015 01:13:22 Просмотров 27 Источник

Ниже приводится содержимое, хранящееся в моем файле

This is my Input

Таким образом, с помощью wc -cмы можем получить количество символов, хранящихся в файле.

Мой ожидаемый результат для вышеуказанного файла, отредактированного с помощью VIM в Ubuntu, равен 16. Но, wc -cвозвращает 17.

Почему результат такой? В конце очереди нет даже возврата кареты. Итак, что такое 17-й символ?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/31584361/wc-command-in-linux#comment51121186_31584361
Есть еще один дополнительный счет для новой строки.
https://stackoverflow.com/questions/31584361/wc-command-in-linux#comment51121238_31584361
Но я не ввел ни одной новой строки. Я просто открываю vim, ввожу содержимое и просто закрываю. Я не нажать клавишу Enter.

Ответы - Команда WC в linux / WC command in linux

Fattaneh Talebi

23.07.2015 01:17:43

конечно, вы должны были войти. может быть, ты не видишь этого. рассмотрим эти два примера:

 echo -n "This is my Input" | wc -c
 16

потому что -Н для избежания войти, но

echo  "This is my Input" | wc -c
 17

посмотрите на этот пример и тоже увидите новую строку.

enter image description here

Как увидеть новую строку?

echo "This is my Input" | od -c

файлы дампа od в восьмеричном и других форматах
- c выберите символы ASCII или экранирование обратной косой черты

А вот пример для файла и использования od enter image description here

https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121342_31584450
эхо "это мой вклад". Хорошо. В этой строке вы должны войти или нет
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121367_31584450
в этом случае вы должны войти
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121391_31584450
но с -н у вас нет входа
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121458_31584450
где. Это просто строковый литерал. Правильно это или нет
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121507_31584450
в конце строки у вас тоже есть enter
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121665_31584450
Не совсем. Рассмотрим foo="This is my input". Строка не содержит новой строки, но если вы попытаетесь пересчитать ее символы с помощью команды echo "$foo" | wc -c, новая строка будет добавлена командой echo. Для подсчета символов в строке в bash используйте ${#foo}.
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121669_31584450
Я добавил изображение посмотреть, чтобы увидеть новую строку
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51121847_31584450
Хорошо. Здесь '\n ' добавляется echo.So, выход - 17. Если мы передадим входные данные через файл типа " wc-c a.txt"
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51122656_31584450
@Edheal был прекрасный комментарий для вас почтой: Echo "это мое мнение" | ОД -C и попробовать его, чтобы увидеть новую строку
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51123167_31584450
@FattanehTalebi я не сказал, что это неправильно. - Вот именно. Мой вопрос: "wc-c a.txt". Выход - 17. Но ожидаемый результат-16. Я также использую следующий метод. ОД -с a.txt. В то время он показывал только 16. Здесь '\n ' не добавляется. Итак, почему wc показывает 17. что такое дополнительный один символ. Это из файла или '\n', который мы вводим, чтобы выполнить команду в терминале.
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51123239_31584450
@mohanraj О, я понял, что вы имеете в виду, хорошо, я проверю это
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51124007_31584450
@FattanehTalebi пожалуйста, выйди из echo и попытайся понять мою проблему. Ниже приведен вывод для моего файла, если мы используем od. И здесь нет никакого "\n". $ od-c b.txt 0000000 T h i s i s m y i n p u t 0000020 $
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584450#comment51124755_31584450
@mohanrajl, извините, что не смог найти ответов.
Shravan Yadav

23.07.2015 01:24:30

входная строка, которую вы вводите в качестве входной, не имеет ввода / новой строки, но echo присваивает ей ввод/новую строку. И туалет -с читается войти или новой строки от команды Echo.

например

echo k | wc -c 

возвращает 2, так как 1 для k и 1 для новой строки, добавленной echo

пока

echo -n k | wc -c

возвращает 1, так как-n подавляет новую строку.

но wc-c всегда читает новую строку.

Вы можете попробовать

printf k | wc -c 

возврат 1

смотрите, что он делает в файле

bash-4.1$ echo 1234 > newfile
bash-4.1$ cat newfile
1234
bash-4.1$ cat -e newfile
1234$
bash-4.1$ printf 1234 > newfile
bash-4.1$ cat newfile
1234bash-4.1$ cat -e newfile
1234bash-4.1$
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584615#comment51121679_31584615
Но, я передаю входные данные только через файл. как "wc-c a.txt"
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584615#comment51121796_31584615
ладно, попробуй это. Echo "это мое мнение" > a.txt затем запустите сан. узел-с a.txt и printf "это мое мнение" > a.txt а потом туалет -с a.txt. Вы знаете разницу, о которой я говорю.
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584615#comment51121873_31584615
Я использую ubuntu. Редактор-это ВИМ
https://stackoverflow.com/questions/31584361/wc-command-in-linux/31584615#comment51121983_31584615
Я использую Linux и оболочка KSH и редактору VI. Вы можете проверить это на командной строке.выполните команду echo "мой" , на выходе вы получите следующий запрос в строку и выполнить Эхо -Н "Мой" или printf "мой" , на выходе вы получите приглашение только после моей строки.
chengpohi

23.07.2015 01:40:19

В Linux, когда VIM сохраняет буферы, он завершает каждую строку, добавляя Терминатор новой строки. Шестнадцатеричный дамп редактируемого файла VIM.

Вы можете открыть свой файл и ввести:!xxd для просмотра Хекс-дамп или использовать непосредственно hexdump yourfile команды.

0000000: 5468 6973 2069 7320 6d79 2049 6e70 7574  This is my Input
0000010: 0a                                       .
~                                                                                                                                 
~                                                                                                                                 
~    

Там вы можете видеть, что файл добавил 0aв конце файла.

поэтому, когда вы используете wc -c, чтобы получить номер этого файла, он вернет 17, которые включили новый символ строки.

Helper

02.12.2015 05:51:36

У вас есть 17 из-за /0 chaeracter.

https://stackoverflow.com/questions/31584361/wc-command-in-linux/34045728#comment55846345_34045728
У вас есть несколько опечаток здесь /0вместо \0и chaeracterпротив character. Дополнительный символ, подсчитываемый wc-c, не является нулем (0), это Терминатор строки, скорее всего, a \n. В файле формата DOS вы получите 18, потому что это будет двухбайтовый линейный Терминатор \r\n.
Закрыть X