2011-11-17 30 views
26

Tôi có một bãi chứa sql với 300mb cung cấp cho tôi một lỗi trên dòng cụ thể.Tệp văn bản dòng cụ thể lớn nhất

Nhưng dòng đó nằm ở giữa tệp. Đâu là cách tiếp cận lí tưởng nhất?

head -n middleLine dump.sql > output?

Hoặc tôi có thể xuất chỉ dòng tôi cần không?

+0

bạn cần những gì sau khi dòng này cũng hay chỉ là những gì trước đây? –

Trả lời

33

Bạn có thể sử dụng sed -n -e 123456p your.dump in dòng 123456

+0

tuyệt vời! cảm ơn bạn. tôi thực sự sử dụng 'sed -n 123,130p my.dump' cho phạm vi dòng đầu ra! – balsagoth

+2

Có lẽ đó chỉ là tôi, nhưng có vẻ như tôi là kiểu xấu để bỏ qua '-e'. Tôi cũng thường xuyên trích dẫn lệnh sed sau khi '-e' vì nó thường chứa các ký tự khác nhau :-) ... Tôi sẽ viết nó 'sed -n -e' 123,130 p 'my.dump'. –

3

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

sed -n "x p" dump.sql 

nơi x là số dòng.

-4

Nếu bạn biết một cụm từ trên đường mà tôi sẽ sử dụng grep. Nếu cụm từ là "errortext" sử dụng:

$ cat dump.sql | grep "errortext" 
+0

đây không phải là những gì tôi yêu cầu. Điều này sẽ xuất mỗi "errortext" trên tập tin, không phải dòng tôi cần đầu ra. – balsagoth

+0

Hơn cả mèo | grep là vô ích trong khi grep cũng có thể xử lý các tệp. Xem http://partmaps.org/era/unix/award.html –

22

Nếu tập tin là dài, xem xét sử dụng

sed -n 'X{p;q}' file 

đâu X là số dòng. Nó sẽ ngừng đọc tập tin sau khi đạt đến dòng đó.

+4

+1 để thoát sau khi tìm đường. –

+4

Trên một số hệ thống, như osx, nó cần thêm dấu chấm phẩy: 'sed -n 'X {p; q;}' tệp ' – LopSae

2

Điều này có thể làm việc cho bạn:

sed 'X!d;q' file 

trong đó X là số dòng.

4

Nếu sed là quá chậm cho hương vị của bạn, bạn cũng có thể sử dụng

cat $THE_FILE | head -n $DESIRED_LINE | tail -n 1 
+1

Nếu tôi chạy một cái gì đó như:" started = 'date +% s% 3N'; for i trong {1..500}, làm echo "$ longlist" | sed -n 10p; done; stoped = 'date +% s% 3N'; echo" scale = 3; ($ stoped - $ bắt đầu)/1000 "| bc" và so sánh với nhau nhưng với head -n 10 | tail -n 1, sed nhanh hơn trong hệ thống của tôi. – desgua

3

này cũng có thể được thực hiện với Perl:

perl -wnl -e '$. == 4444444 and print and exit;' 

4444444 là số dòng bạn muốn in.

Lưu ý rằng tệp phải được đóng khi dòng được in để bạn không tiếp tục đọc.

2

Bạn cũng có thể thử awk như:

awk 'NR==YOUR_LINE_NO{print}' file_name 
Các vấn đề liên quan