Ich bin daran interessiert, die Zeilennummer der längsten Zeile aus einer Datei herauszufinden.
Zum Beispiel, wenn ich eine Datei mit folgendem Inhalt habe:
lalala
tatatata
abracadabra
mu mu mu
Wie kann ich ein Bash-Skript schreiben, das mir eine Ausgabe wie folgt gibt : 3 -> abracadabra
?
command-line
bash
scripts
user214965
quelle
quelle
^
) und ihrem Ende ($
) genau n Zeichen (.{n}
) hat. Dann muss er nur noch n finden: Dafür verwendet er einen GNU-Ismus, "wc -L Dateiname" (beachten Sie, dass dies kein Posix ist), der die Länge der längsten Zeile des Dateinamens zurückgibt. Also greift er nach jeder Zeile mit der längsten Länge.$(cmd)
wird durch die Ausgabe von ersetztcmd
.-C 3
den grep-Optionen auch (z. B.) hinzufügen können, um ein paar Zeilen vor und nach dem Kontext zu erhaltenSie könnten nutzen
awk
die Länge jeder Zeile (druckenlength()
) und die Zeilennummer (NR
), dann rückwärts (-r
)sort
das Ergebnis durch die Anzahl (-n
):Um nur die erste Zeile anzuzeigen:
quelle
wc -L
, ich wusste nichts über dieses Argument. Es ist in der Tat sehr nützlich.AO (N) kann mit einem Perl One Liner erreicht werden:
Verwendungen (wobei machin ein Dateiname ist)
oder
oder (weniger klar, aber kürzer)
quelle
O (n) Für Computer, z. B. OpenWRT, auf denen Perl nicht verfügbar ist, kann die Version @ awk @ hilfreich sein.
oder Python:
quelle
Radus Antwort ist vollkommen ausreichend und wird bevorzugt. Wenn Sie jedoch eine explizitere und Shell-basierte Lösung wünschen, können Sie das folgende Skript verwenden:
Verwendungszweck:
./find_longest.sh input.txt
Beispiel:
quelle