Wiem, jak uzyskać długość najdłuższej linii w pliku tekstowym za pomocą awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
ale jak mogę uzyskać długość najdłuższej linii wszystkich plików w katalogu?
Najprostszym rozwiązaniem jest połączenie wszystkich plików i przesłanie wyniku do skryptu:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
Możesz także przekazać bezpośrednio kilka plików do awk:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
Oczywiście mogą istnieć pewne ostrzeżenia, jeśli pliki są w rzeczywistości katalogami, ale powinny być nieszkodliwe. Możesz mieć większe problemy z plikami binarnymi, ponieważ nie mają one pojęcia linii . Aby być bardziej szczegółowym, możesz zrobić coś takiego
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
aby dopasować tylko .txt
pliki w bieżącym katalogu.
I, jak stwierdził @ G-Man w swoim komentarzu, *
nie będzie pasował do ukrytych plików (zaczynając od kropki). Jeśli chcesz, użyj * .*
.
cat * .* | ...
. Lub wyeliminuj niepotrzebne użycie kota i powiedzawk '...' * .*
.Z GNU
wc
:-L
wypisuje długość najdłuższej linii.źródło
Jeśli chcesz maksymalną długość pliku, z GNU awk:
Lub jedna maksymalna długość we wszystkich plikach:
To zakłada, że pliki kończą się znakami nowej linii. Jeśli jeden plik nie kończy się znakiem nowej linii, to jego ostatnia nie rozdzielana linia zostanie scalona z pierwszą linią następnego pliku i prawdopodobnie unieważni twój wynik.
-size +1c
jest optymalizacją, ponieważ pliki tekstowe, które są puste lub zawierają tylko jeden znak, mają odpowiednio 0 linii i 1 pustą linię, więc nie będą miały najdłuższej linii.źródło
Również z GNU wc (coreutils 8.4), może obsługiwać wiele plików
źródło
wc -L
, ale twoje rozwiązanie ma tę wadę, że musisz najpierw przejść przez maksymalną długość wszystkich innych plików. Czy ma to jakąś zaletę?