Szukam prostego sposobu znalezienia długości najdłuższej linii w pliku. Idealnie byłoby to proste polecenie powłoki bash zamiast skryptu.
198
Korzystanie z wc (GNU coreutils) 7.4:
wc -L filename
daje:
101 filename
-c -l -m -w
opcje to POSIX.-L
to GNUism.-L
zależy od ustawień regionalnych. Niektóre znaki (zarówno bajtowe, jak i wielobajtowe) mogą nawet nie być liczone!wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
jest wcoreutils
formule, która instaluje wszystkie jądra GNU zg
prefiksem.Dla odniesienia: Znajdowanie najdłuższej linii w pliku
źródło
END{}
bloku.źródło
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
Tylko dla zabawy i celów edukacyjnych, czyste rozwiązanie powłoki POSIX , bez zbędnego korzystania z cat i bez wybierania poleceń zewnętrznych. Pierwszym argumentem jest nazwa pliku:
źródło
< "$1"
niego można łatwo odczytać ze standardowego wejścia. Z testem$#
może to zrobić oba, w zależności od liczby argumentów. Po prostu nie ma potrzeby zbędnych kotów na tym świecie. Początkujących należy uczyć odpowiednio od samego początku.longest < /usr/share/dict/words
daje
źródło
wc
wysyłaniu nazwy pliku :)Drukuje długość, numer linii i zawartość najdłuższej linii
Drukuje posortowaną listę wszystkich linii z numerami i długościami linii
.
jest operatorem konkatenacji - używa się go tutaj po length (),$.
gdzie bieżący numer linii$_
jest bieżącą liniąźródło
wc -L
to najlepsze rozwiązanie, jakie do tej pory widziałem.wc -L
3 sekundywc -L
wystarczy policzyć rekordy liczb - to Q miało znaleźć najdłuższą linię - niezupełnie takie same, więc nie jest to dokładne porównanie.Ważny przeoczony punkt w powyższych przykładach.
Poniższe 2 przykłady zawierają rozwinięte karty
Poniższe 2 liczą nie rozwinięte karty.
więc
źródło
Wygląda na to, że odpowiedź nie podaje numeru najdłuższej linii. Następujące polecenie może podać numer linii i z grubsza długość:
źródło
awk '{print length}' test.txt | sort -rn | head -1
. Jeśli potrzebujesz także rzeczywistej zawartości linii, toawk '{print length,$0}' test.txt | sort -k1 -rn| head -1
W perlu:
to tylko drukuje linię, a nie jej długość.
źródło
Oto odniesienia do odpowiedzi
http://wtanaka.com/node/7719
źródło
Dla zabawy, oto wersja Powershell:
I po prostu uzyskać długość:
źródło
sort
jako argument można wziąć plik filename.txt? Wtedy kot jest bezużyteczny, ponieważsort length filename.txt | select -last 1
unika potoku i procesu, który po prostu kopiuje dane.Jestem w środowisku Unix i pracuję z plikami spakowanymi gzipem o wielkości kilku GB. Przetestowałem następujące polecenia, używając 2 gzipowanego pliku o długości rekordu 2052.
zcat <gzipped file> | wc -L
i
zcat <gzipped file> | awk '{print length}' | sort -u
Czasy były na średnim poziomie
117 sekund
109 sekund
Oto mój skrypt po około 10 uruchomieniach.
źródło
awk
wersja korzysta z buforowania bloków dysku dlawc
wersji, która jest uruchomiona jako pierwsza (i inicjuje pamięć podręczną dysku). Będziesz musiał losowo uporządkować, kto zostanie wywołany jako pierwszy w ciągu dziesięciu przebiegów, aby utrzymać ten argument.Wariacja na temat.
Ten pokaże wszystkie linie mające długość najdłuższej linii znalezionej w pliku, zachowując kolejność, w jakiej pojawiają się w źródle.
Więc mój plik
da
źródło
Jeśli używasz MacOS i
wc: illegal option -- L
pojawia się ten błąd: nie musisz instalować GNU sipmly, zrób to.Jeśli wszystko, co chcesz zrobić, to po prostu uzyskać liczbę znaków w najdłuższej linii pliku i używasz OS X run:
awk '{print length}' "$file_name" | sort -rn | head -1
Coś takiego;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Wyjścia:
The longest line in the file my_file has 117 characters
źródło