Ich verwende Windows 7 und habe GnuWin32. Ich habe eine mehrere Gigabyte große Textdatei mit LF ( \n
)-Zeilenenden. Ich möchte wissen, wie viele Zeilen sie hat (oder alternativ, wie viele LFs sie hat, also beispielsweise eins weniger, aber das ist mir egal). Was ist der schnellste oder kostengünstigste Weg, um meine Antwort zu erhalten?
Einige Möglichkeiten (obwohl ich sicher bin, dass ich einige übersehen habe):
wc -l foo
grep -c $ foo
(mit-c
wird nur die Anzahl der übereinstimmenden Zeilen gedruckt)grep -c ^^ foo
(das erste Caretzeichen entgeht dem zweiten)sed -n $= foo
(-n
verhindert das Drucken der Zeile;$
beschränkt auf die letzte Zeile;=
druckt die Zeilennummer)
(Das sind die GnuWin32-Dienstprogramme. Ich kenne keine native Windows-Methode.)
Antwort1
Windows-Befehlszeilenlösung
type foo | find "" /v /c
Powershell-Lösungen
(get-content foo | measure-object -line).lines
(dir foo | select-string .).count
(type foo).count
(gc foo | measure-object | select count).count
Perl-Lösung
perl -pe '}{$_=$.' foo
Awk-Lösung
awk 'END { print NR }' foo
Weiterführende Literatur
- Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
- finden- Suchen Sie in einer Datei nach einer Textzeichenfolge und zeigen Sie alle Zeilen an, in denen sie gefunden wird.
- Ein AZ-Index der Windows PowerShell-Befehle– Ein hervorragendes Nachschlagewerk zu allen Themen rund um PowerShell.
Antwort2
Am schnellsten geht für mich die Kommandozeile:find /v /c "" foo.txt
Ich muss noch einen richtigen Benchmark durchführen, aber ich habe es type
für (get-content foo | measure-object -line)
eine 10 GB-Datei auf einem 2 GB-RAM-Server versucht, aber es hat viel zu lange gedauert. Find kam jedoch schnell genug zurück