Wc is a small handy tool which I use often. I’m calling it word-count in my head.(Today I learned by looking wc up on Wikipedia: it is actually called word count) It is part of the GNU coreutils it should be on nearly any system.
What can you do with wc? With wc you can simply count lines, words or characters of a file or string, and thats it. Nothing more or less.
wc -c
will give you the number of characters.
wc -w
will give you the number of words.
wc -l
will give you the number of lines.
c - characters, w - words, l - lines.
The needed parameters are really intuitive.
Examples:
wc -c <FILE>
will give you the character count in that file and puts the filename aside
cat <FILE> | wc -c
will give you only the character count
This is exactly the same for the other parameters.
wc -w <FILE>
will give you the word count in that file and puts the filename aside
cat <FILE> | wc -w
will give you only the word count
Sample:
wc -l <FILE>
will give you the line count in that file and puts the filename aside
cat <FILE> | wc -l
will give you only the line count
If you just call wc
it will mix them up.
You get three numbers and the filename:
$ wc .zshrc
112 463 3628 .zshrc
The first is the line count, the second is the word count and the last is the character count.
Wc isn’t anything special, it just does one thing well like the most unix tools.
What I sometimes do for example is to check of many lines of code I have written in a project for example to get the LOC of all java files:
$ wc -l **/*.java
109 main/java/homework/mstruebing/app/App.java
81 main/java/homework/mstruebing/app/domain/model/Config.java
75 main/java/homework/mstruebing/app/domain/model/Password.java
49 main/java/homework/mstruebing/app/domain/model/PasswordList.java
47 main/java/homework/mstruebing/app/domain/model/User.java
130 main/java/homework/mstruebing/app/domain/repository/ConfigRepository.java
10 main/java/homework/mstruebing/app/domain/repository/PasswordListRepository.java
10 main/java/homework/mstruebing/app/domain/repository/PasswordRepository.java
11 main/java/homework/mstruebing/app/domain/repository/RepositoryInterface.java
74 main/java/homework/mstruebing/app/domain/repository/Repository.java
21 main/java/homework/mstruebing/app/domain/repository/UserRepository.java
74 main/java/homework/mstruebing/app/service/ConfigService.java
94 main/java/homework/mstruebing/app/service/DatabaseService.java
86 main/java/homework/mstruebing/app/service/EncryptionService.java
38 test/java/homework/mstruebing/app/AppTest.java
62 test/java/homework/mstruebing/app/EncryptionServiceTest.java
971 total
But what it is also really handy for is to analyze log files.
Lastly I had to make tons of API calls which sometimes returned an error.
I created a log file which was simply like starting api call x of xx
and if an error occurred I logged ERROR: <MEANINGFULL-ERROR-MESSAGE>
That gives me the possibility to grep for ERROR
for example to know how many API calls had failed.
cat <LOGFILE> | grep ERROR | wc -l
And I could also grep for specific error messages and count them because of the specific error message I logged after the error.
So that’s it, I think there is nothing more to say about wc.
Additional information: Man page of wc
The full help text:
$ wc --help
Usage: wc [OPTION]... [FILE]...
or: wc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified. A word is a non-zero-length sequence of
characters delimited by white space.
With no FILE, or when FILE is -, read standard input.
The options below may be used to select which counts are printed, always in
the following order: newline, word, character, byte, maximum line length.
-c, --bytes print the byte counts
-m, --chars print the character counts
-l, --lines print the newline counts
--files0-from=F read input from the files specified by
NUL-terminated names in file F;
If F is - then read names from standard input
-L, --max-line-length print the maximum display width
-w, --words print the word counts
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/wc>
or available locally via: info '(coreutils) wc invocation'