web-dev-qa-db-ja.com

テキストファイルに表示されていない行数を調べるにはどうすればよいですか。

エディターやビューアーアプリケーションでファイルを開かずに、テキストファイルに含まれる行数を見つけるにはどうすればよいですか?番号を確認するための便利なUnixコンソールコマンドはありますか?

49
Ivan

確かにあります。これはwcと呼ばれ、もともとはワードカウントと思われますが、行、単語、文字、バイト(および一部の実装では、最長の行の長さまたは最も広い行の表示幅)を実行できます1)。 -lオプションは、行数を数えるように指示します(実際には、改行文字を数えるので、適切に区切られた行のみ):

wc -l mytextfile

または、行数のみを出力するには:

wc -l < mytextfile

(一部の実装では、その数の前に空白が挿入されることに注意してください)。

76
Kevin

別のオプションは、grepを使用して、パターンが一致する回数を見つけることです。

grep --regexp="$" --count /path/to/myfile.txt

この例では、

  • $は、新しい行に評価される式です(Enterボタンが押されます)。
  • --countは、一致の通常の出力を抑制し、一致した回数を表示します。
  • /path/to/myfile.txtはかなり明白です。

編集:コメントで@hesseが述べたように、これは以下のように短縮できます。

grep -c $ path/to/file

これにより、GNU grep実装への移植性も標準化されます。

11
DavidDraughn

また、何らかの理由でawkを使用しない場合は、純粋なwcでこれを実行するのは非常に簡単です。

$ awk 'END { print NR }' /path/to/file

上記のprintsは、/path/to/fileにあるファイルに存在するレコード(NR)の数です。

wcとは異なり、これはファイルの名前を出力しません。したがって、数値のみが必要な場合は、これはcat file | wc -lの代わりに使用できます。

4
HalosGhost

@Kevinが示唆したように、wcコマンドを使用して、ファイル内の行をカウントできます。しかしながら、 wc -l test.txtは結果にファイル名を含めます。以下を使用できます。

wc -l < test.txt

ファイル名を含まない行数を取得するだけです。試してみる。

1
Just a learner

私のテストに従って、AWKが他のツール(GREP、SED、AWK、Perl、WC)よりもはるかに高速であることを確認できます

これは私がここで実行したテストの結果です

date +%x_%H:%M:%S; grep -c $ my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09:41:51 24579427 10/03/16_09:42:40〜49秒

date +%x_%H:%M:%S; wc -l my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09:35:05 24579427 my_file.txt 10/03/16_09:35:45〜40秒

date +%x_%H:%M:%S; sed -n '$=' my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09:33:50 24579427 10/03/16_09:34:29〜39秒

date +%x_%H:%M:%S; Perl -ne 'END { $_=$.;if(!/^[0-9]+$/){$_=0;};print "$_" }' my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09:36:11 24579427 10/03/16_09:36:36〜25秒

date +%x_%H:%M:%S; awk 'END { print NR }' my_file.txt; date
+%x_%H:%M:%S; 

10/03/16_09:43:36 24579427 10/03/16_09:43:58〜22秒

0
Pramod Tiwari