Unixowy kot zaczynający się od linii

40

Jaki jest najlepszy sposób na wyjście z pliku zaczynającego się od określonej linii (duża liczba, np. 70000). Coś jak:

cat --line=70000 <file>
vonhogen
źródło

Odpowiedzi:

60

Spójrz na ogon, a dokładniej, jest to przełącznik --lines = + N:

tail --lines=+100 <file>
Svend
źródło
Łał. Nie wiedziałem o tym, nawet po 8 latach używania go na Linuksie! Zawsze używałem bash fn! Dzięki ! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; ogon -n $ lineno 1 $; }
secureBadshah
2
Uwaga: to nie działa na Mountain Lion (Darwin Kernel wersja 13.1.0). Wariant dla lwa górskiego jesttail -n
Kaushik Ghose
22

Najbardziej oczywistym sposobem jest tail. Składnia może się nieco różnić w zależności od używanego systemu operacyjnego:

tail -n +70000

Jeśli nie możesz dostać się taildo pracy, możesz użyć sed, ale może skończyć się wolniej:

sed -pe '1,69999d'
Chris Johnsen
źródło
taildziałało dobrze w MinGW (na pliku tekstowym 600 MB). Środowisko wykonawcze trwało zaledwie kilka sekund (ale plik wejściowy mógł już znajdować się w pamięci podręcznej plików).
Peter Mortensen
2

Jeśli zamiast numeru linii musisz rozpocząć wyświetlanie w wierszu zawierającym dany $phrase, spróbuj wykonać następujące czynności.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

-1000 będzie stale wyświetlać tekst dla maksymalnie 1000 linii; możesz to zmienić w razie potrzeby. sedPolecenie odciąć pierwsze 4 linie wyjścia, które zostały automatycznie wstawiony przez morezawierający pusty wiersz komunikat „... pomijam”, a dwie linie poprzedzających planowaną linię startu. Myślę, że może się to różnić w zależności od twojego systemu.

AlohaUnixFan
źródło
2

Możesz użyć parametru NR za pomocą polecenia awk :

cat <file> | awk '{if (NR>=7000) print}'
Gefolge
źródło
2
Możesz użyć tego polecenia z innymi ograniczeniami. Jako przykład: cat messages | awk '{if (NR>=7000 && NR <7003) print}'pokazuje tylko wiersz 7000, 7001 i 7002.
Gefolge
-1

ogon +250

więcej o komendzie cat unix


źródło
2
fascynujący link, ale tak naprawdę nie zawiera żadnych informacji, które dotyczą tego pytania, a twoja tailsugestia jest taka sama, jak zaakceptowanych i innych odpowiedzi sprzed tygodni. po co zawracać sobie głowę publikowaniem?
quack quixote
Link jest zerwany -...can't find the server at www.scripterworld.com.
Peter Mortensen,