2012-06-19 11 views
8

Próbuję odczytać wiersz pliku po linii, zaczynając od konkretnej linii w bash. Użyłem już polecenia while, aby przeczytać każdą linię pliku, zwiększając liczbę. Czy mogę zacząć od określonej linii?Odczytywanie linii zaczynających się od numeru wiersza w skrypcie 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 

Każdy rodzaj pomocy w formie sugestii lub algorytmów jest mile widziany.

Edytuj: Próbuję przekazać numer wiersza jako zmienną. Jestem Grepping dla określonego wzoru i jeśli zostanie znaleziony, powinien przekazać numer linii począwszy od wzorca.

+1

Dlaczego w fragmencie kodu nie ma nic, co zwiększa licznik? Proszę pokazać prawdziwy kod, a wtedy odpowiedź będzie prawie oczywista. – Arsen7

+0

Czy są spacje w '$ LINE'? –

+0

@ Arsen7 Gil

Odpowiedz

11

użyłbym sed „s addresses rozpocząć w określonym numerem linii i drukować na końcu pliku:

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

Albo to, albo, jak sugeruje Fredrik użyć awk:

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

Po prostu trzymaj licznik. Aby wydrukować wszystkie linie po pewnej linii, można zrobić tak:

#!/bin/bash 

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

lub, dlaczego nie użyć awk:

awk 'NR>5' lines.txt 
4

Co o czymś takim?

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

Nie jest kompatybilny z POSIX, ale spróbuj na swoim Bash. Oczywiście, rób to, co chcesz, za pomocą $ line inside while loop.
PS: Zmień numer za pomocą żądanej linii numerycznej i nazwy pliku z nazwą pliku.

0

Po prostu odczytaj określoną liczbę wierszy do żądanej liczby i rozpocznij logikę, aby przeczytać resztę.

Nie ma sposobu, aby oszczędzać na pliku "tekstowym", nie można pominąć wierszy bez ich czytania. Linie są ograniczone przez 0x0a i zmienne długości. Dlatego każdy separator musi zostać zeskanowany i policzony, aby osiągnąć określony "numer linii". Są sztuczki, które pozwalają ci myśleć, że ich nie czytałeś, ale zrobiłeś to.

Powiązane problemy