2013-06-05 11 views
5

Jakie polecenie powłoki unix można użyć, aby uzyskać linie x (np. 10) do y (np. Do 15) z pliku. grep wydaje się nie pomagać, a poza robieniem pętli for, nie mogę wymyślić niczego innego.Powłoka: pobierz linie x do y z pliku

+0

Możliwy duplikat: http://unix.stackexchange.com/questions/47407/cat-line-x-to-line-y-on-a-huge- plik – h2ooooooo

+0

http://theunixshell.blogspot.com/2013/06/print-range-of-lines-in-perl-based-upon.html – Vijay

+0

Tak! bardzo duplikat, przepraszam! Chociaż KingsIndian rozwiązanie nie może być tam łatwo. – navige

Odpowiedz

20

Można użyć sed:

sed -n '5,10p' filename 

drukować wiersze od 5 do 10.

+0

dzięki! działa świetnie! – navige

2

Można użyć head i tail, np

head -n 15 $file | tail -n 5 
+0

Dobre rozwiązanie też! – navige

5

głowica Y ogon Y-X

head -n 15 filename | tail -n 5 
+0

Dobre rozwiązanie też! – navige

4

awk:

awk 'NR>=10 and NR<=15' your_file 

Perl

perl -lne 'print if($.>=10 && $.<=15)' your_file 

testowane poniżej

> cat temp 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
> nawk 'NR>=10&&NR<=15' temp 
10 
11 
12 
13 
14 
15 
> perl -lne 'print if($.>=10&&$.<=15)' temp 
10 
11 
12 
13 
14 
15 
> 
+0

Bardzo podoba mi się rozwiązanie awk, dzięki! Szkoda, że ​​nigdy nie nauczyłem się perla, też ładnie wyglądam. – navige

3

Dla większych plików:

sed '10,15! d;15q' file 
+0

Proszę wyjaśnić, proszę? – navige

+0

! D usuwa wszystkie linie nie pomiędzy 10 a 15. 15q sprawia, że ​​sed przerwie przetwarzanie w 15 linii zamiast przetwarzania do ostatniej linii. –

Powiązane problemy