2012-06-19 27 views
8

Bash'daki belirli bir satırdan başlayan bir satır satır okumayı deniyorum. Sayımı artırarak dosyanın her satırını okumak için while komutunu zaten kullandım. Belirli bir satırdan başlayabilir miyim?Bir bash komut dosyasında satır numarasından başlayan satırları oku

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 

Her türlü öneri veya algoritma biçiminde yardım alabilirsiniz.

Düzenleme: Satır numarasını değişken olarak iletmeye çalışıyorum. Belirli bir desen için Grepping ediyorum ve bulunursa, desenden başlayan satır numarasını geçmelidir.

+1

Kod kod parçanızda neden sayacı artıran hiçbir şey yok? Lütfen gerçek kodu göster, sonra cevap neredeyse belli olacak. – Arsen7

+0

$ LINE'da boşluk var mı? –

+0

@ Arsen7 Gil

cevap

11

Belirli bir hat numarasından başlayıp dosyanın sonuna yazdırmak için sed 'ın addresses kullanırsınız: Fredrik önerildiği gibi

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

Ya o ya, kullanmak awk:

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

Sadece bir sayacı saklayın. Belirli bir satırdan sonra tüm satırları yazdırmak için, böyle yapabilirsiniz:

#!/bin/bash 

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

ya, neden awk kullanmayın:

awk 'NR>5' lines.txt 
4

Ne böyle bir şey olacak?

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

POSIX uyumlu değil, ancak Bash'inizde deneyin. Elbette, döngü boyunca $ line ile istediğiniz şeyi yapın.
Not: Numara numarasını istediğiniz numara ile değiştirin ve dosya adıyla file.name.

0

Sadece istediğiniz numaraya kadar belirli sayıda satır okuyun ve diğerlerini okumak için mantığınızı başlatın.

Bir "metin" dosyasında ekonomiye yer bırakmanın bir yolu yoktur, aslında onları okumadan satırları atlayamazsınız. Çizgiler 0x0a ve değişken uzunluklarla sınırlandırılmıştır. Bu nedenle her bir sınırlayıcı taranmalı ve belirli bir "satır-numarasına" ulaşmak için sayılmalıdır. Onları okumadığını düşünmene izin veren hile var ama sen yaptın.

İlgili konular