Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the wc command count one more character than expected?

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?

like image 262
mohangraj Avatar asked Jul 23 '15 10:07

mohangraj


2 Answers

Of course you had enter. Maybe you can't 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:

enter image description here

How to see newline?

echo "This is my Input" | od -c

od dumps files in octal and other formats. -c selects ASCII characters or backslash escapes.

And here is an example for file and usage of od:

enter image description here

like image 87
Fattaneh Talebi Avatar answered Sep 18 '22 23:09

Fattaneh Talebi


In Linux, when Vim saves buffers, it will terminate every line by appending line terminator of new line.

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 includes the new line symbol.

like image 23
chengpohi Avatar answered Sep 21 '22 23:09

chengpohi