2013-06-05 26 views
5

Tôi có thể sử dụng lệnh unix shell nào để lấy các dòng x (ví dụ 10) đến y (ví dụ: 15) từ một tệp. grep dường như không giúp ích gì và ngoại trừ việc lặp lại tôi không thể nghĩ ra bất cứ điều gì khác.Shell: lấy các dòng x đến y của tệp

+0

có thể trùng lặp của: 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

Có! rất nhiều bản sao, xin lỗi! mặc dù giải pháp KingsIndian không thể được tìm thấy ở đó một cách dễ dàng. – navige

Trả lời

20

Bạn có thể sử dụng sed:

sed -n '5,10p' filename 

in dòng từ 5 đến 10

+0

cảm ơn! hoạt động hoàn hảo! – navige

2

Bạn có thể sử dụng headtail, ví dụ

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

Giải pháp tốt! – navige

5

đầu y, đuôi y-x

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

Giải pháp tốt! – navige

4

awk:

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

perl:

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

thử nghiệm dưới đây:

> 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

Tôi thích giải pháp awk rất nhiều, cảm ơn! Quá tệ tôi chưa bao giờ học perl, nhìn đẹp quá. – navige

3

Đối với các file lớn hơn:

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

Bạn có thể giải thích không? – navige

+0

! D xóa tất cả các dòng không nằm trong khoảng từ 10 đến 15. 15q khiến sed phải ngừng xử lý ở dòng 15 thay vì xử lý cho đến dòng cuối cùng. –

Các vấn đề liên quan