2012-06-19 20 views
8

Estoy tratando de leer un archivo línea por línea a partir de una línea específica en bash. Ya he usado el comando while para leer cada línea del archivo al incrementar el conteo. ¿Puedo hacer que comience desde una línea específica?Leer líneas a partir de un número de línea en un 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 

Cualquier tipo de ayuda en forma de sugerencias o algoritmos son bienvenidos.

Editar: Estoy tratando de pasar el número de línea como una variable. Estoy ampliando para un patrón específico y, si lo encuentro, debería pasar el número de línea a partir del patrón.

+1

¿Por qué en su fragmento de código no hay nada que incremente el contador? Por favor, muestre el código real, y entonces la respuesta será casi obvia. – Arsen7

+0

¿Hay espacios en '$ LINE'? –

+0

@ Arsen7 Gil

Respuesta

11

me gustaría utilizar sed 's addresses empezar en un número de línea concreto e imprimirlo al final del archivo:

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

O eso, o, como se sugiere Fredrik, utilice awk:

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

Mantenga un contador. Para imprimir todas las líneas después de una cierta línea, puede hacerlo de esta manera:

#!/bin/bash 

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

o, por qué no usar awk:

awk 'NR>5' lines.txt 
4

¿Qué pasa algo como esto?

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

No es compatible con POSIX, pero prueba tu Bash. Por supuesto, haz lo que quieras con $ line inside while loop.
PD: Cambie el número con la línea numérica que desee y file.name con el nombre del archivo.

0

Simplemente, lea una cierta cantidad de líneas hasta el número que desee y comience su lógica para leer el resto.

No hay forma de economizar en un archivo de "texto", no puede omitir líneas sin leerlas realmente. Las líneas están delimitadas por 0x0a y de longitudes variables. Por lo tanto, cada delimitador debe ser escaneado y contado para llegar a un cierto "número de línea". Hay trucos que te permiten pensar que no los leíste, pero lo hiciste.

Cuestiones relacionadas