2010-09-22 34 views

Trả lời

6

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

# print line number 10 
$ sed -n '10p' file_name 
$ sed '10!d' file_name 
$ sed '10q;d' file_name 
+1

Trên hệ thống của tôi, ví dụ cuối cùng của bạn thường nhanh hơn phiên bản awk, head/tail hoặc ruby ​​trừ khi dòng ở gần cuối tệp. Chỉ có phiên bản đuôi/đầu bắt đầu nhanh hơn một chút khi dòng tiếp cận phần cuối của tệp. –

3

awk -v linenum=10 'NR == linenum {print; exit}' file

+0

Chỉ có thể sử dụng 'awk NR == 10 file_name' như trong câu trả lời của tôi. – dogbane

+0

Nếu tệp lớn, bạn không muốn đọc phần còn lại của nó một cách không cần thiết, vì vậy hãy thoát. –

0
ruby -ne '$.==10 and (print; exit)' file 
+0

'ruby -ne '$. == 10 và (in; thoát)'' sẽ nhanh hơn. –

2

Nếu bạn biết những dòng có cùng độ dài, sau đó một chương trình có thể chỉ số trực tiếp vào dòng đó mà không đọc tất cả những preceeding: một cái gì đó giống như od có thể có thể làm điều đó, hoặc bạn có thể mã hóa nó trong nửa tá dòng trong hầu hết mọi ngôn ngữ. Tìm một hàm gọi là seek() hoặc fseek().

Nếu không, có lẽ ...

tail +N | head -n 1 

... như thế này hỏi đuôi để chuyển sang dòng thứ N, và có rất ít dòng đặt không cần thiết thông qua các đường ống hơn so với đầu của bạn để giải pháp đuôi.

+0

Đó phải là 'đầu 1' thay vì' đầu -1'. –

+0

@Dennis: bạn có chắc không? Với tất cả các triển khai đầu mà tôi từng thấy 'head 1' sẽ cố gắng tìm một tệp có tên" 1 ". Tôi đã kiểm tra kỹ trên GNU/Linux và chắc chắn là 'đầu -1'. Bạn sử dụng phiên bản đầu nào? –

+0

Ồ, xin lỗi, GNU 'head' khăng khăng trên' -n' nên 'head -n 1'. Tôi đánh máy nhận xét của tôi. Với '-n -1' GNU' head' xuất tất cả trừ dòng cuối cùng chứ không phải chỉ là dòng đầu tiên. Phiên bản: đầu (GNU coreutils) 7.4 –

4
#print 10th line 
awk NR==10 file_name 
Các vấn đề liên quan