Wie viele Zeilen sind in jeder Datei.
Verwenden Sie wc
ursprünglich für die Wortzählung, glaube ich, aber es kann Zeilen, Wörter, Zeichen, Bytes und die längste Zeilenlänge tun. Die -l
Option weist es an, Zeilen zu zählen.
wc -l <filename>
Dies gibt die Anzahl der Zeilen in:
$ wc -l /dir/file.txt
32724 /dir/file.txt
Sie können Daten auch an Folgendes weiterleiten wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
Wie viele Zeilen sind im Verzeichnis.
Versuchen:
find . -name '*.pl' | xargs wc -l
Ein weiterer Einzeiler:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
Übrigens zählt der wc
Befehl neue Zeilencodes, keine Zeilen. Wenn die letzte Zeile in der Datei nicht mit einem neuen Zeilencode endet, wird dies nicht gezählt.
Sie können grep -c ^ verwenden, vollständiges Beispiel:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
Wie viele Zeilen insgesamt
Ich bin mir nicht sicher, ob ich Ihre Anfrage richtig verstanden habe. Dies gibt beispielsweise Ergebnisse in folgendem Format aus, wobei die Anzahl der Zeilen für jede Datei angezeigt wird:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
Alternativ kann es sich als nützlich erweisen, nur die Gesamtzahl der Zeichen für neue Zeilen auszugeben, ohne dass die Anzahl der Dateien nach dem folgenden Befehl berechnet wird:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
Am wichtigsten ist, ich brauche dies in "lesbarem Format", z. 12.345.678 statt 12345678
Bash hat eine eingebaute printf- Funktion:
printf "%0.2f\n" $T
Wie immer gibt es viele verschiedene Methoden, mit denen die gleichen Ergebnisse erzielt werden können.
printf
liest seine Argumente nicht vonstdin
, sondern von der Kommandozeile (Vergleiche Piping mitecho
und Piping mitcat
;cat
liest vonstdin
,echo
nicht). Verwenden Sie stattdessen,printf "$(find ... | xargs ...)"
um die Ausgabe als Argumente für bereitzustellenprintf
.In vielen Fällen kann es ausreichen , den
wc
Befehl und den Platzhalter*
zu kombinieren .Wenn sich alle Ihre Dateien in einem einzigen Verzeichnis befinden, können Sie Folgendes aufrufen:
Sie können auch mehrere Dateien und Verzeichnisse auflisten:
Dieser Befehl zeigt eine Liste der Dateien und die Anzahl der Zeilen.
Die letzte Zeile ist die Summe der Zeilen aller Dateien.
So zählen Sie alle Dateien in einem Verzeichnis rekursiv:
Aktivieren Sie zunächst globstar, indem Sie es
shopt -s globstar
zu Ihrem .bash_profile hinzufügen. Für die Unterstützung von globstar ist Bash ≥ 4.x erforderlich, das bei Bedarf mit installiert werdenbrew install bash
kann. Sie können Ihre Version mit überprüfenbash --version
.Dann renne:
Beachten Sie, dass diese Ausgabe falsch ist, wenn Globstar nicht aktiviert ist.
quelle
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
"Dieser Befehl gibt eine Liste von Zeilencodes in jedem Verzeichnis aus:
quelle
Ein bisschen zu spät zum Spiel, aber ich habe eine Reihe von Argumentationsfehlern mit den oben genannten aufgrund der Größe des Verzeichnisses. Das hat bei mir funktioniert:
for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt
quelle
cat
Wenn Sie die Dateien zu einer kombinieren und alles nach stdout ausgeben möchten, können Sie dieswc -l
für eine Gesamtanzahl von Zeilen von Dateien in einem Verzeichnis tun :quelle
Ich werde einfach @malyy Antwort für das Folgende erweitern (zu groß für einen Kommentar):
Viele Antworten verwenden die
wc
Befehlszeilenoption mitxargs
. Das Problem dabei ist, dass xargs auf eine eher kleine plattformabhängige Größe beschränkt ist.Außerdem gibt es einen Unterschied zwischen BSD (macOS) und GNU (Linux / Homebrew)
wc
.Die GNU-Version ist ideal, da sie die Dateiliste anstelle von Argumenten (
--files0
) aus einer Datei lesen kann .Wenn Sie auf einem Mac arbeiten und Homebrew haben, sollten Sie Folgendes tun:
Beachten Sie die GWC anstelle von WC .
quelle