Jak wyświetlić ogromny plik tekstowy przez Vi lub gedit

24

Wygenerowałem wordlist.txt11 GB przez crunch-3.6. Kiedy próbuję otworzyć plik za pomocą Vi lub gedit, mam problemy z powodu rozmiaru pliku. Jak mogę wyświetlić ten plik?

vais sai
źródło
8
Nie sądzę, że to duplikat. Chociaż jest blisko spokrewniona i niektóre odpowiedzi mogą być pomocne, ta dotyczy przeglądania, a nie edytowania. Przyjęta odpowiedź nie jest pomocna do przeglądania.
pLumo,
1
Zgadzam się. Przeglądanie pliku i edycja pliku to nie to samo, a rozróżnienie staje się ważniejsze tylko wtedy, gdy plik jest bardzo duży.
Eliah Kagan

Odpowiedzi:

43

Nie używaj edytora tekstu do przeglądania tekstu.

Istnieją lepsze narzędzia:


Przeglądaj pliki za pomocą less(Przewijaj spacją, End, Home, PageUp, PageDown; Szukaj za pomocą „/ coś”; Wyjdź za pomocą q).

Z lessinstrukcji:

Less nie musi czytać całego pliku wejściowego przed uruchomieniem, więc przy dużych plikach wejściowych uruchamia się szybciej niż edytory tekstu, takie jak vi (1).

Stosowanie:

less wordlist.txt

Rozważ użycie less -n:

-n lub --line-numbers:

Pomija numery linii. Domyślne (użycie numerów linii) może powodować, że less działa w niektórych przypadkach wolniej, szczególnie przy bardzo dużym pliku wejściowym. Pomijanie numerów linii z -nopcją pozwoli uniknąć tego problemu.

(dzięki za sugestię opcji -n @pipe)


Użyj, grepaby uzyskać tylko te linie, które Cię interesują:

# Show all Lines beginning with A:
grep "^A:"  wordlist.txt

# Show all Lines ending with x and use less for better viewing
grep "x$"  wordlist.txt | less

Użyj headlub, tailaby uzyskać pierwszą lub ostatnią n linii

head wordlist.txt
tail -n 200 wordlist.txt

Aby edytować tekst, zapoznaj się z tym pytaniem .

pLumo
źródło
4
Zauważ, że morezaładuje cały plik do pamięci, w przeciwieństwie do less. Jeśli jest tak duży, odradzałbym go używać. Najlepszą opcją byłoby zdecydowanie użycie grep.
Nepho
1
Mój komentarz może być w rzeczywistości fałszywy. Zacząłem sprawdzanie zarówno morei lesskodu źródłowego, i oba wydają się skorzystać z jednej openlub fopen, co nie zmienia niczego w odniesieniu do sposobu plik zostanie załadowany, o ile wiem
Nepho
2
Zgoda. morejest bardzo przestarzałym narzędziem, jeśli lessjest dostępne, nie myślę o żadnym celu, dla którego chcesz go użyć more.
Nepho
1
@Nepho, morema jedną ogromną przewagę nad less: nie obsługuje LESSOPENpreprocesora wejściowego. Jeśli próbujesz wyświetlić nieprzetworzony tekst strony podręcznika lub czegoś takiego, pisanie jest znacznie szybsze more my_docs.manniż przeglądanie lessdokumentacji, aby dowiedzieć się, jak wyłączyć preprocesor.
Mark
1
Sugeruję przywoływanie rzadziej przy użyciu czegoś takiego jak w less -nSprzypadku dużych plików, aby trochę przyspieszyć.
rura
10

Często wystarczy „grep”, aby znaleźć to, czego potrzebujesz.

Jeśli potrzebujesz więcej „kontekstu” wokół określonej linii, użyj „grep -n”, aby znaleźć numery linii interesujących linii, a następnie użyj sed, aby wydrukować „fragment” pliku wokół tej linii:

$ grep -n 'word' file 
123:A line with with word in it 

$ sed -n '120,125p' file 
A line 
Another line
The line before
A line with with word in it 
The line after
Something else
Phill W.
źródło
10
nie potrzebujesz sed, możesz używać grep -Bi -A drukować linie B efore i A fter ...
pLumo
7
@RoVo Albo -Co C przystojniak (zarówno przed, jak i po nim).
wjandrea,