Gibt es eine Möglichkeit, die Ganzzahl zu erhalten, die wc in bash zurückgibt?
Grundsätzlich möchte ich die Zeilennummern und Wortzahlen nach dem Dateinamen auf den Bildschirm schreiben.
output: filename linecount wordcount
Folgendes habe ich bisher:
files=`ls`
for f in $files;
do
if [ ! -d $f ] #only print out information about files !directories
then
# some way of getting the wc integers into shell variables and then printing them
echo "$f $lines $ words"
fi
done
cut
mit der vollständigen Ausgabe von arbeiten,wc $f
da die Anzahl der Leerzeichen zwischen den Feldern variiert.Die einfachste Antwort aller Zeiten:
quelle
wc -c < file name
, erhalten Sie nur die ganzzahlige Anzahl von Bytes und sonst nichts.Gerade:
wird den Job machen. Diese Ausgabe enthält jedoch Leerzeichen mit Präfix, da
wc
die Zahl rechtsbündig ausgerichtet ist.quelle
wc -l < foo.txt | xargs
ref - stackoverflow.com/a/12973694/149428lines=`wc -l < $f`
entsteht eine Variable "line", deren Wert keine führenden Leerzeichen enthält.find . -path -prune -o -name "*.swift" -print0 | xargs -0 wc -l
funktioniert einwandfrei, druckt aber jede Datei. Wenn ich benutze,find . -path -prune -o -name "*.swift" -print0 | xargs -0 wc -l <
erhalte ich eine Fehlermeldung.parse error near '\n'
Passen Sie sie nach Bedarf an Ihr Layout an.
Es ist auch schöner, positive Logik ("ist eine Datei") gegenüber negativer ("kein Verzeichnis") zu verwenden.
quelle
wc $file | awk '{print $4" "$2" "$1}'
- Apostrophe außerhalb von{}
.Manchmal gibt wc in verschiedenen Formaten auf verschiedenen Plattformen aus. Beispielsweise:
In OS X:
In Centos:
Wenn Sie also nur cut verwenden, wird die Nummer möglicherweise nicht abgerufen. Versuchen Sie stattdessen tr, Leerzeichen zu löschen:
quelle
Die akzeptierten / populäre Antworten tun nicht Arbeit auf OSX.
Alle folgenden Funktionen sollten unter bsd und Linux portierbar sein.
ODER
ODER
quelle
Wenn Sie den Dateinamen in
wc
diesen umleiten, wird der Dateiname bei der Ausgabe weggelassen.Bash:
oder
for
Gehen Sie folgendermaßen vor, anstatt die Ausgabe von zu durchlaufenls
:Dies funktioniert, wenn es Dateinamen gibt, die Leerzeichen enthalten.
Wenn Sie Globbing nicht verwenden können, sollten Sie eine
while read
Schleife erstellen :oder Prozesssubstitution verwenden
quelle
read lines words characters filename <<< $(wc "$f")
Oh, und wenn Sie * gegen Leerzeichen gehärtet haben, möchten Sie die Var auch doppelt zitieren, wenn Sie sie verwenden.$f
in diesem Fall), ist dies nicht erforderlich. Außerdem fragte das OP, wie man nur die ganze Zahl erhält . Sie haben Recht, eine Variable zu zitieren, aber ich habe die Verwendung der Variablen nicht gezeigt, daher habe ich diesen Punkt nicht erwähnt. Wie Sie wissen,for f in *
sollte das Formular fast immer verwendet werden, anstatt die Ausgabe von zu verwendenls
.ls
Punkt stimme ich voll und ganz zu . Das bringt dir eine Auszeichnung. partmaps.org/era/unix/award.html#lsread lines words characters _ <<< $(wc "$f")
$_
ist nur eine andere Variable.Wenn die Datei klein ist, können Sie es sich leisten,
wc
zweimal aufzurufen und Folgendes zu verwenden, um das Weiterleiten an einen zusätzlichen Prozess zu vermeiden:Das
$((...))
ist die arithmetische Erweiterung von Bash.wc
In diesem Fall werden alle Leerzeichen aus der Ausgabe von entfernt .Diese Lösung ist sinnvoller, wenn Sie entweder die Zeilenanzahl oder die Wortanzahl benötigen.
quelle
Wie wäre es mit
sed
?quelle
quelle
Versuchen Sie dies für ein numerisches Ergebnis:
nlines = $ (wc -l <$ myfile)
quelle
Versuche dies:
Es erstellt eine Zeilen- und Wortanzahl (LINE und WC) und erhöht diese mit den aus wc extrahierten Werten (wobei $ 1 für den Wert der ersten Spalte und $ 2 für den zweiten verwendet wird) und druckt schließlich die Ergebnisse.
quelle
Ausgaben: myfile.txt Zeilen: 10 Wörter: 20 Bytes: 120
quelle
quelle
perl
trotzdem verwenden, können Sie die Wortzählung auch in Perl durchführen. Ein wirtschaftlicherer Ansatz wäre, zutr -d '[:space:]'