WC command in linux

喜你入骨 提交于 2021-02-08 15:55:50

问题


The following is the content stored in my file

This is my Input

So, using wc -c command we can get the number of characters stored in the file.

My expected output for above file that edited by using VIM in Ubuntu is 16. But, wc -c command returns 17.

Why is the output like this? There isn't even a carriage return at end of line. So, what is the 17th character?


回答1:


of course you had enter. maybe you cant see it. consider these two examples:

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

because -n is for avoiding enter but

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

look at this example too see the new line.

How to see newline?

echo "This is my Input" | od -c

od dump files in octal and other formats
-c select ASCII characters or backslash escapes

And here is an example for file and usage of od




回答2:


In Linux, When VIM save buffers, it will terminate every line by appending line terminator of new line. The hex-dump of VIM edited file.

You can open your file and input :!xxd to view hex-dump or directly use hexdump yourfile command.

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

In there you can see, the file have appended 0a in the end of file.

so when you use wc -c to get the number of this file, it will return 17 that have included the new line symbol.




回答3:


You have 17 because of the /0 chaeracter.




回答4:


the input string you giving as input has no enter/new line, but echo is assigning enter/newline to it. And wc -c reads enter or newline from given by echo command.

for example

echo k | wc -c 

returns 2 because 1 for k and 1 for new line appended by echo

while

echo -n k | wc -c

returns 1 because -n suppresses the newline.

but wc -c always reads newline.

You can try

printf k | wc -c 

returns 1

see what It does in file

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!