Używam systemów importowania opartych na rozdzielanych plikach tekstowych. Używane pliki mogą czasami mieć prawie 2 GB i muszę sprawdzić niektóre wiersze z tego pliku. Więc chcę wiedzieć, w jaki sposób mogę wydrukować (na innym pliku lub tylko na ekranie) linie o określonej wartości? Na przykład. numer linii 1010123, 1002451, 994123 itp., dokładnie tak, jak w pliku źródłowym?Jak zdobyć określone linie z dużego pliku tekstowego w Uniksie?
Odpowiedz
Aby wydrukować linii N
, zastosowanie:
sed 'Nq;d' file
Aby wydrukować wiele wierszy (zakładając, że są one w kolejność rosnąca) np 994123, 1002451, 1010123.
sed '994123p;1002451p;1010123q;d' file
q
po ostatni numer linia mówi sed
rzucić gdy osiągnie linię 1010123th, zamiast tracić czas przez zapętlenie nad pozostałymi liniami, które nie są zainteresowane w tym jest dlaczego jest wydajny w przypadku dużych plików.
Można to zrobić za pomocą wielu narzędzi Unix, na przykład z awk
:
# print first 5 lines with awk
awk 'NR>=1&&NR<=5{print}NR>=6{exit}' file
# print selection of lines
awk 'NR==994123||NR==1002451||NR==1010123{print}NR>1010123{exit}' file
Jak 'sed' /' awk' wykonywać na bardzo dużych plików, takich jak te, o których wspomniał w swoim pytaniu (~ 2GB)? –
Numery linii nie są sekwencyjne. Nie pierwszy Nth lub ostatni Nth. To tylko linie z błędami. Mam numery linii w tabeli i po prostu chcę wypisać tylko określone numery linii. – BogdanM
@BogdanM zobacz drugi przykład 'awk' dla tego (dogbane odpowiedzi pokazuje jak z sed) Myślałem, że zakresy drukowania również będą dla ciebie przydatne. –
W python:
readThisFile = open('YOURFILE')
outputFile = open('OUTPUT', w)
for actualline, linetext in enumerate(readThisFile):
if actualline == WANTEDLINE
outputFile.write(linetext)
else:
pass
Jeśli chciał można zmodyfikować ten skrypt do pracy z argumentów (jak getline.py 1234)
Bardziej wydajnie byłoby wyjść po wydaniu 'outputFile.write (linetext)', ponieważ pytanie jest oznaczone tylko 'unix' więc nie jestem pewien, czy OP ma' Python' dostępny. –
Nie mogę powiedzieć, czy jest dostępny Python, czy nie (nie powiedział, który język, którego chce, jest rozwiązaniem napisanym). A z powodu rzucenia na linię: Tak, można to zrobić, ale mój scenariusz nie jest skryptem "jest gotowy do użycia, po prostu skopiuj i wklej", to tylko podpowiedź, jak można to zrobić – chill0r
- 1. Jak odczytywać określone wiersze dużego pliku csv
- 2. C# wyszukiwanie dużego pliku tekstowego
- 3. Czytaj linie z pliku tekstowego, ale pomiń pierwsze dwie linie.
- 4. Usunąć zduplikowane linie z pliku tekstowego?
- 5. Jak wybrać losowe unikalne linie z pliku tekstowego w powłoce?
- 6. Usuń linie zawierające słowo kluczowe z pliku
- 7. jak zdobyć (txt) zawartość pliku z FileField?
- 8. Pliku pliku tekstowego z Python
- 9. Wystąpienie błędu Java OutOfMemoryError podczas czytania dużego pliku tekstowego
- 10. Jak załadować określone wiersze z pliku .txt w języku Python?
- 11. jak odczytać ekstremalne długie linie z pliku tekstowego szybko i bezpiecznie w C++?
- 12. Otwieranie dużego pliku JSON w Pythonie
- 13. powershell Uzyskaj liczbę linii dużego (dużego) pliku
- 14. Pokaż nowe linie z obszaru tekstowego w ASP.NET MVC
- 15. Parsowanie dużego pliku JSON
- 16. Jak wyczyścić określone pole w pliku InlineFormSet?
- 17. pierwszy znak czytania z pliku tekstowego: i »¿
- 18. Jak zatwierdzać tylko określone linie za pomocą SmartGit/Hg
- 19. Jak wybrać losową linię z pliku tekstowego
- 20. Android - Jak zdobyć Uri z surowego pliku?
- 21. Jak zdobyć długą nazwę pliku z ARGV
- 22. Javascript: Eksportowanie dużego pliku tekstowego/pliku CSV powoduje awarię przeglądarki Google Chrome
- 23. Czytanie pliku tekstowego z Androidem
- 24. Usuń wszystkie linie podziału z długiego ciągu tekstowego.
- 25. Python: Jak zignorować linie #comment podczas czytania w pliku
- 26. Jak zdobyć nazwy pliku .exe
- 27. Chunking danych z dużego pliku do wieloprocesowości?
- 28. linie drukować w pliku z linii meczu do końca pliku
- 29. Odczytaj jeden bajt z dużego pliku
- 30. Łączenie linii z pliku tekstowego w systemie Unix?
Dzięki za milion. To działało jak zaklęcie :) – BogdanM