Ich kann Länge der längsten Zeile in einer Textdatei mit erhalten awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
aber wie kann ich die Länge der längsten Zeile aller Dateien in einem Verzeichnis ermitteln?
Die einfachste Lösung besteht darin, alle Dateien zu verketten und das Ergebnis an Ihr Skript weiterzuleiten:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
Sie können auch mehrere Dateien direkt an awk übergeben:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
Natürlich kann es einige Warnungen geben, wenn Dateien tatsächlich Verzeichnisse sind, aber es sollte harmlos sein. Sie haben möglicherweise größere Probleme mit Binärdateien, da sie kein Linienkonzept haben . Um genauer zu sein, können Sie so etwas tun
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
um nur die .txt
Dateien im aktuellen Verzeichnis abzugleichen.
Und, wie @ G-Man in seinem Kommentar feststellte, *
werden keine versteckten Dateien gefunden (beginnend mit einem Punkt). Wenn Sie diese möchten, verwenden Sie * .*
.
cat * .* | ...
. Oder beseitigen Sie den nutzlosen Gebrauch der Katze und sagen Sieawk '...' * .*
.Mit GNU
wc
:-L
druckt die Länge der längsten Zeile.quelle
Wenn Sie die maximale Länge pro Datei mit GNU awk wollen:
Oder die maximale Länge in allen Dateien:
Dies setzt voraus, dass die Dateien mit Zeilenumbrüchen enden. Wenn eine Datei nicht mit einem Zeilenumbruch endet, wird die letzte nicht begrenzte Zeile mit der ersten Zeile der nächsten Datei zusammengeführt und das Ergebnis möglicherweise ungültig.
-size +1c
ist eine Optimierung, da Textdateien, die leer sind oder nur ein Zeichen enthalten, jeweils 0 Zeilen und 1 Leerzeile haben, also nicht die längste Zeile haben.quelle
Auch mit GNU wc (coreutils 8.4) können mehrere Dateien verarbeitet werden
quelle
wc -L
tut, aber Ihre Lösung hat den Nachteil , dass Sie durch die Maximallänge aller anderen Dateien zuerst waten. Hat das einen Vorteil?