2012-06-19 13 views
8

Sto provando a leggere un file riga per riga a partire da una riga specifica in bash. Ho già usato il comando while per leggere ogni riga del file incrementando il conteggio. Posso farlo partire da una linea specifica?Lettura di righe a partire da un numero di riga in uno script 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 

Qualsiasi tipo di aiuto sotto forma di suggerimenti o algoritmi è benvenuto.

Modifica: sto cercando di passare il numero di riga come variabile. Sto facendo un grepping per uno schema specifico e se trovato, dovrei passare il numero di riga a partire dal modello.

+1

Perché nel proprio frammento di codice non c'è nulla che incrementi il ​​contatore? Per favore, mostra il codice reale, e quindi la risposta sarà quasi ovvia. – Arsen7

+0

Ci sono spazi in '$ LINE'? –

+0

@ Arsen7 Gil

risposta

11

userei sed s' addresses per iniziare in un determinato numero di riga e stampare alla fine del file:

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

Uno che o, come suggerito Fredrik, utilizzare awk:

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

Basta tenere un contatore. Per stampare tutte le righe dopo una certa linea, si può fare in questo modo:

#!/bin/bash 

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

o, perché non usare awk:

awk 'NR>5' lines.txt 
4

Che dire qualcosa di simile?

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

Non è POSIX compatibile, ma prova il tuo Bash. Certo, fai quello che vuoi con $ line dentro while loop.
PS: modificare il numero con la riga numerica desiderata e file.name con il nome del file.

0

Basta andare a leggere un certo numero di righe fino al numero desiderato e avviare la logica per leggere il resto.

Non esiste un modo per risparmiare su un file di "testo", non è possibile saltare le righe senza effettivamente leggerle. Le linee sono delimitate da 0x0a e di lunghezze variabili. Pertanto, ogni delimitatore deve essere scansionato e contato per raggiungere un determinato "numero di riga". Ci sono espedienti che ti fanno pensare che non li hai letti, ma l'hai fatto.

Problemi correlati