Count number of blank lines in a file

2019-03-10 16:49发布

问题:

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 blank line I also mean lines that have spaces in them.

回答1:

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 lines

If your grep doesn't support -P option, please use -E '[^[:space:]]'



回答2:

One way using grep:

grep -c "^$" file

Or with whitespace:

grep -c "^\s*$" file 


回答3:

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.

Test

$ cat a
aa dd

ddd


he      llo
$ cat -vet a # -vet to show tabs and spaces
aa dd$
    $
ddd$
   $
^I$
he^Illo$

Now let's' count the number of blank lines:

$ awk '!NF {s+=1} END {print s}' a
3


回答4:

grep -cx '\s*' file

or

grep -cx '[[:space:]]*' file

That is faster than the code in Steve's answer.



回答5:

Using Perl one-liner:

perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file


回答6:

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


回答7:

grep -v '\S' | wc -l

(On OSX the Perl expressions are not available, -P option)