đọc phạm vi dòng được chỉ định từ một tệp


15

Tôi có tệp i chứa 100000 dòng làm thế nào tôi có thể nhận được các dòng từ dòng # 5555 đến dòng # 7777 trong linux.

Cảm ơn vì tất cả.

linux  files  sed 

1
@ibrahim, xem xét chấp nhận câu trả lời của Kyle (bằng cách đánh dấu vào dấu kiểm màu xanh lá cây bên trái) nếu nó giúp bạn
Jonik

bạn có thể chính xác nếu bạn muốn sử dụng sed hoặc nếu các công cụ khác đều ổn.
Manu H

Một chút nghiên cứu ném ít nhất stackoverflow.com/questions/83329/ từ
sancho.s Phục hồi Monica

Câu trả lời:


22
sed '5555,7777!d' <filename>

Điều này sẽ in các dòng 5555-7777 của tập tin.

Dennis Đăng những điều sau đây mà tôi đồng ý sẽ nhanh hơn:

sed '5555,7777p; 7778q' filename

Bằng chứng sau đây cho thấy nó phải nhanh hơn:

$ n=1
$ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done
$ strace -e trace=read -o sed1 sed '5555,7777!d' sedtest2
$ strace -e trace=read -o sed2 sed '5555,7777p; 7778q' sedtest2
$ wc -l sed1
149 sed1
$ wc -l sed2
14 sed1

Trong Bash chỉ (cho vui):

n=1
while read line; do 
    if [[ ($n -ge 5555) && ($n -le 7777)  ]]; then 
        echo $line
    elif [[ $n -gt 7777 ]]; then
        break
    fi 
    n=$(( $n + 1 ))
done < file

Tôi nghĩ bạn $n -gt 3nên là 7777? Ngoài ra, bạn có thể thực hiện if (( n >= 5555 ))cho các toán tử so sánh số "tự nhiên" hơn (và khả năng loại bỏ ký hiệu đô la). Và bạn có thể làm được ((n++)).
Tạm dừng cho đến khi có thông báo mới.


7

Một trong hai nên hoạt động;

  • sed -n ' bắt đầu , kết thúc p'
  • awk 'NR> = startnumber && NR <= endnumber ' tệp

Bằng cách này, câu hỏi tuyệt vời;)


1

Tôi thấy rằng tùy chọn sed không hoạt động trên tệp mysqldump, tôi đoán là do xử lý các nguồn cấp dữ liệu được trích dẫn hoặc các ký tự đa dòng. đầu và đuôi cắt nó bằng cách sử dụng các số dòng giống như grep, đó là những gì tôi cần. Để có được dòng $ j đến $ k, bạn cần:

x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x} 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.