テキスト行をカウントするにはどうすればよいですか?


14

テキストファイルの行数をカウントする方法を教えてください。例:

command file.txt

空ではない行(空白やタブを数えない行)だけを数えたいことに注意してください。



4
質問は明確に定義されていません。空白(スペースとTAB)だけの行は空と見なされますか?
-Rmano

有権者を閉じる:@Rmano がOPのコメントに従って説明した後に編集された質問 だから、不明の近くには投票しないでください
αғsнιη

2
@KasiyAそれはまだ不明です。OPが空白(スペース、タブ、\r)のみでsa行をカウントするか、スキップするかを理解していません。現在の回答では、すべての行がスペースでカウントされ、空の行のみがスキップされます。
テルドン

OP DO @terdon(空行(を含む空白行カウントしたくない\rかを\n私が考えるとしてライン-と専用のタブとライン-で専用スペース、))、それらをスキップする答えに応じて私が理解したこと。
αғsнιη

回答:


11

上記の答えは正しいが、わずかに異なっている、あなたは使用することができますgrep簡単にコードなどのためにをgrep -vc '^$' file.txt

例(A):file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$2

例(B):file.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$4

結果が4であることに注意してください!2つだけを期待する場合。ただし、コンテンツとコメントの間のタブもカウントされます。

0からのカウントと1からのカウントは、grepまたはsedの詳細検索で覚えているように、grepからsedまでとは異なります。


1
どちらの例でも空の行をカウントしますが、OPはすべての行をカウントするコマンドを要求しましたが、空の行
-kos

2
実際、私は間違っていsedます、オプションは実際には正しいですが、grep1つは正しくありません
コス

部分的にしか正解ではないので、私は答えをダウン票し、あなたがそれを修正したらコメントをドロップして、ダウン票を削除できるようにします
コス

1
@kos確かに、あなたは質問がどんなに曖昧なのか気づきましたか?
amrx

2
@kos、あなたはそもそも正しかった、ありがとう。私は36時間以上寝ていませんでした、寝る時間だと思います!
-amrx

12

試してくださいsed

sed '/^$/d' file.txt | wc -l

スペースまたはタブのみを含む行があり、それらもカウントから無視する場合:

sed '/^[[:blank:]]*$/d' file.txt | wc -l

3
^\s*$タブまたはスペースのみを含む行も考慮するために使用します。
シルヴァンピノー

@SylvainPineau:追加..
heemayl

1
OPの質問から明らかではなかったが、スペース/タブを含むテキストは期待される結果+1を変更する可能性があることに同意します。
シルヴァンピノー

3

を使用してgrep

grep -vc '^$' file  # or
grep -vc '^\s*$' file    

3

次を使用できます。

grep -cve '^\s*$' file.txt

そのためのコマンドが必要な場合は、次の行をに貼り付け.bashrcてシェルセッションを再起動するか、新しいターミナルを開きます。

count_lines()
{
    grep -cve '^\s*$' $1
}

例:

count_lines file.txt
42

2

awk 'NF{++count} END{print count}' file

説明:

NFフィールドの総数、従ってこのプリント示す唯一の非空白行を非空白行であるため、NFより大きい0真へと評価します。だから、インクリメントカウント awkは非空白行を見つけたときにフラグをし、印刷の最新の値カウントで最後にフラグをEND{print count}


1

編集:すべてをパイプcするgrep代わりにオプションを追加するだけwcで、よりコンパクトなバージョンについて@muruの答えを参照してください


grep

grep -v '^$' file.txt | wc -l

0

Perlソリューション

Perlはそれを行うことができます。一般に、カウント行は次のように機能します。

$ perl -ne 'END{print $.}' input.txt                                                                                     

すべての空行を除外する場合は、次のようにします。

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

このような入力ファイルがあるとしましょう

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

合計5行、空行が2行あります。出力されるコマンドは次のとおりです。

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3

複数ファイルの改善

これは、単一のファイルに適しています。複数のファイルで機能させるには、次のようにします。

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.