2013-06-05 14 views
5

Quale comando di shell unix posso utilizzare per ottenere le linee x (ad esempio da 10) a y (ad es. 15) da un file. grep non sembra aiutare e salvo fare un ciclo for non riesco a pensare ad altro.Shell: ottiene le linee da x a y del file

+0

Possibile duplicato di: http://unix.stackexchange.com/questions/47407/cat-line-x-to-line-y-on-a-huge- file – h2ooooooo

+0

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

+0

Sì! molto un duplicato, mi dispiace! sebbene la soluzione KingsIndian non possa essere trovata lì facilmente. – navige

risposta

20

È possibile utilizzare sed:

sed -n '5,10p' filename 

per stampare linee da 5 a 10.

+0

grazie! funziona perfettamente! – navige

2

È possibile utilizzare head e tail, per esempio

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

Buona soluzione anche! – navige

5

testa y, y-tail x

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

Buona soluzione anche! – navige

4

awk:

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

Perl:

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

testato sotto:

> 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

Mi piace molto la soluzione di awk, grazie! Peccato che non ho mai imparato perl, anche bello. – navige

3

Per i file più grandi:

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

Puoi spiegare, per favore? – navige

+0

! D cancella tutte le linee non comprese tra 10 e 15. 15q fa sed per uscire dall'elaborazione alla 15 ° linea invece di elaborare fino all'ultima riga. –

Problemi correlati