2012-06-19 38 views
8

Tôi đang cố gắng đọc một dòng tệp theo dòng bắt đầu từ một dòng cụ thể trong bash. Tôi đã sử dụng lệnh while để đọc từng dòng của tệp bằng cách tăng số đếm. Tôi có thể bắt đầu từ một dòng cụ thể không?Đọc các dòng bắt đầu từ một số dòng trong tập lệnh bash

let count=0 
declare -a ARRAY 

while read LINE; do 
ARRAY[$count]=$LINE 
vech=${ARRAY[$count]} 
    if [...blah ..] 
    then 
    ...blah.. 
    fi 
sleep 2 
((count++)) 
done < filec.c 

Mọi loại trợ giúp dưới dạng đề xuất hoặc thuật toán đều được chào đón.

Chỉnh sửa: Tôi đang cố chuyển số dòng dưới dạng biến. Tôi Grepping cho một mô hình cụ thể và nếu tìm thấy, nên vượt qua số dòng bắt đầu từ mô hình.

+1

Tại sao trong đoạn mã của bạn, không có gì tăng bộ đếm? Xin vui lòng, hiển thị mã thực, và sau đó câu trả lời sẽ gần như hiển nhiên. – Arsen7

+0

Có khoảng trống trong '$ LINE' không? –

+0

@ Arsen7 Gil

Trả lời

11

Tôi sẽ sử dụng sed 's addresses để bắt đầu tại một số dòng cụ thể và in vào cuối của tập tin:

lineNumber=10 
sed -n "$lineNumber"',$p' | 
while read line; do 
    # do stuff 
done 

Hoặc đó hoặc, như Fredrik đề nghị, sử dụng awk:

lineNumber=10 
awk "NR > $lineNumber" | 
while read line; do 
    # do stuff 
done 
1

Chỉ cần giữ một bộ đếm. Để in tất cả các dòng sau khi một dòng nhất định, bạn có thể làm như thế này:

#!/bin/bash 

cnt=0 
while read LINE 
do 
    if [ "$cnt" -gt 5 ]; 
    then 
     echo $LINE 
    fi 
    cnt=$((cnt+1)) 
done < lines.txt 

hay, tại sao không sử dụng awk:

awk 'NR>5' lines.txt 
4

gì về một cái gì đó như thế này?

while read -r line 
do 
    echo "$line" 
done < <(tail -n +number file.name) 

Nó không tương thích POSIX, nhưng hãy thử Bash của bạn. Tất nhiên, làm những gì bạn muốn với $ line bên trong trong khi vòng lặp.
PS: Thay đổi số với số thứ tự bạn muốn và tệp.name với tên tệp.

0

Chỉ cần đọc một số dòng nhất định đến số bạn muốn và bắt đầu logic của bạn để đọc phần còn lại.

Không có cách nào để tiết kiệm trên tệp "văn bản", bạn không thể bỏ qua các dòng mà không thực sự đọc chúng. Các dòng được phân tách bằng 0x0a và độ dài biến đổi. Do đó, mỗi dấu phân cách phải được quét và được tính để đạt được "số dòng nhất định". Có những mánh lới quảng cáo cho phép bạn nghĩ rằng bạn không đọc chúng, nhưng bạn đã làm.

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