In count (non-blank) lines-of-code in bash they explain how to count the number of non-empty lines.
But is there a way to count the number of blank lines in a file? By
To count how many useless blank lines your colleague has inserted in a project you can launch a one-line command like this:
blankLinesTotal=0; for file in $( find . -name "*.cpp" ); do blankLines=$(grep -cvE '\S' ${file}); blankLinesTotal=$[${blankLines} + ${blankLinesTotal}]; echo $file" has" ${blankLines} " empty lines." ; done; echo "Total: "${blankLinesTotal}
This prints:
<filename0>.cpp #blankLines
....
....
<filenameN>.cpp #blankLines
Total #blankLinesTotal
You can also use awk
for this:
awk '!NF {sum += 1} END {print sum}' file
From the manual, "The variable NF is set to the total number of fields in the input record". Since the default field separator is the space, any line consisting in either nothing or some spaces will have NF=0
.
Then, it is a matter of counting how many times this happens.
$ cat a
aa dd
ffffd
he llo
$ cat -vet a # -vet to show tabs and spaces
aa dd$
$
ffffd$
$
^I$
he^Illo$
Now let's' count the number of blank lines:
$ awk '!NF {s+=1} END {print s}' a
3
Another way is:
grep -cvP '\S' file
-P '\S'
(perl regex) will match any line contains non-space-v
select non-matching lines-c
print a count of matching linesIf your grep doesn't support -P
option, please use -E '[^[:space:]]'
Using Perl one-liner:
perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
One way using grep
:
grep -c "^$" file
Or with whitespace:
grep -c "^\s*$" file
grep -v '\S' | wc -l
(On OSX the Perl expressions are not available, -P option)