Chciałbym znaleźć numer najdłuższej linii z pliku.
Na przykład, jeśli mam plik o następującej treści:
lalala
tatatata
abracadabra
mu mu mu
jak mogę napisać skrypt bash, który da mi wynik podobny do tego 3 -> abracadabra
:?
command-line
bash
scripts
użytkownik214965
źródło
źródło
^
) a końcem ($
) ma dokładnie n znaków (.{n}
). Potem musi tylko znaleźć n: do tego używa GNU-ism, „wc -L nazwa pliku” (zauważ, że to nie jest posiks), który zwraca długość najdłuższej linii nazwy pliku. Więc grepuje każdą linię, która ma najdłuższą długość.$(cmd)
zastępuje się wynikiemcmd
.-C 3
Do opcji grep, aby uzyskać kilka linii przed i po dla kontekstuMożesz użyć
awk
do wydrukowania długości każdej linii (length()
) i numeru linii (NR
), a następnie odwrócić (-r
)sort
wynik według liczby (-n
):Aby wyświetlić tylko pierwszą linię:
źródło
wc -L
, nie wiedziałem o tym argumencie. Jest to bardzo przydatne.AO (N) można osiągnąć za pomocą wkładki perl one:
zastosowania (gdzie machin to nazwa pliku)
lub
lub (mniej wyraźny, ale krótszy)
źródło
O (n) W przypadku maszyn, na przykład OpenWRT, gdzie perl nie jest dostępny, @ awk @ wersja może być przydatna.
lub python:
źródło
Odpowiedź Radu jest całkowicie wystarczająca i preferowana, chociaż jeśli chcesz bardziej jednoznacznego rozwiązania opartego na powłoce, możesz użyć następującego skryptu:
Stosowanie:
./find_longest.sh input.txt
Przykład:
źródło