web-dev-qa-db-ja.com

ファイル内の空白行の数を数える

bashの(空白ではない)行数を数える では、空でない行の数を数える方法を説明しています。

しかし、ファイル内の空白行の数を数える方法はありますか?空白行とは、スペースが含まれる行も意味します。

35
Sudar

別の方法は次のとおりです。

grep -cvP '\S' file
  • -P '\S'(Perl regex)は、スペースを含まない行に一致します
  • -v一致しない行を選択
  • -c一致する行の数を出力します

Grepが-Pオプションをサポートしていない場合は、-E '[^[:space:]]'を使用してください

54
kev

grepを使用する1つの方法:

grep -c "^$" file

または空白を使用:

grep -c "^\s*$" file 
21
Steve

これには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
2
fedorqui

Perlワンライナーの使用:

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

grep -cx '\s*' file

または

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

これは、Steveの答えのコードよりも高速です。

2
jarno

無駄な空白行プロジェクトに同僚が挿入した数を数えるには、次のような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
1
Luca Davanzo
grep -v '\S' | wc -l

(OSXでは、Perl式は使用できません、-Pオプション)

0
Roy