bashの(空白ではない)行数を数える では、空でない行の数を数える方法を説明しています。
しかし、ファイル内の空白行の数を数える方法はありますか?空白行とは、スペースが含まれる行も意味します。
別の方法は次のとおりです。
grep -cvP '\S' file
-P '\S'
(Perl regex)は、スペースを含まない行に一致します-v
一致しない行を選択-c
一致する行の数を出力しますGrepが-P
オプションをサポートしていない場合は、-E '[^[:space:]]'
を使用してください
grep
を使用する1つの方法:
grep -c "^$" file
または空白を使用:
grep -c "^\s*$" file
これにはawk
を使用することもできます:
awk '!NF {sum += 1} END {print sum}' file
マニュアルから、「変数NFは、入力レコードのフィールドの総数に設定されます」。デフォルトのフィールド区切り文字はスペースであるため、何もないスペースまたは一部のスペースで構成される行にはNF=0
が付きます。
次に、これが何回起こるかを数える問題です。
$ cat a
aa dd
ddd
he llo
$ cat -vet a # -vet to show tabs and spaces
aa dd$
$
ddd$
$
^I$
he^Illo$
次に、空白行の数をカウントしましょう。
$ awk '!NF {s+=1} END {print s}' a
3
Perlワンライナーの使用:
Perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
grep -cx '\s*' file
または
grep -cx '[[:space:]]*' file
これは、Steveの答えのコードよりも高速です。
無駄な空白行プロジェクトに同僚が挿入した数を数えるには、次のような1行のコマンドを起動できます:
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}
これは印刷します:
<filename0>.cpp #blankLines
....
....
<filenameN>.cpp #blankLines
Total #blankLinesTotal
grep -v '\S' | wc -l
(OSXでは、Perl式は使用できません、-Pオプション)