私は Windows 7 を実行しており、GnuWin32 を持っています。LF ( \n
) 行末を持つ数ギガバイトのテキスト ファイルがあります。このファイルの行数を知りたいのですが (または、LF がいくつあるか知りたいのですが、これは 1 つ少ないかもしれませんが、気にしません)。この答えを得るための最も速くて最も安価な方法は何ですか?
いくつかの可能性(ただし、いくつか見逃している可能性もあると思います):
wc -l foo
grep -c $ foo
( を使用すると-c
、一致する行の数だけ出力されます)grep -c ^^ foo
(最初のキャレットは 2 番目のキャレットをエスケープします)sed -n $= foo
(-n
行の印刷を防止します。$
最後の行に制限します。=
行番号を印刷します)
(これらは GnuWin32 ユーティリティです。Windows ネイティブの方法は知りません。)
答え1
Windows コマンドラインソリューション
type foo | find "" /v /c
PowerShellソリューション
(get-content foo | measure-object -line).lines
(dir foo | select-string .).count
(type foo).count
(gc foo | measure-object | select count).count
パールソリューション
perl -pe '}{$_=$.' foo
awkソリューション
awk 'END { print NR }' foo
参考文献
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- 探す- ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
- Windows PowerShell コマンドの AZ インデックス- PowerShell に関連するあらゆることに関する優れたリファレンス。
答え2
私にとって最も速いのはコマンドラインです:find /v /c "" foo.txt
まだ適切なベンチマークはしていませんが、2GBのRAMサーバーで10GBのファイルを試してみましたtype
が(get-content foo | measure-object -line)
、完了するまでに時間がかかりすぎました。ただし、Findは十分に速く戻りました。