2012-06-19 5 views
8

Ich versuche, eine Datei Zeile für Zeile beginnend mit einer bestimmten Zeile in bash zu lesen. Ich habe den while-Befehl bereits benutzt, um jede Zeile der Datei zu lesen, indem ich die Zählung inkrementiere. Kann ich es von einer bestimmten Linie aus starten lassen?Lesen von Zeilen beginnend mit einer Zeilennummer in einem Bash-Skript

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 

Jede Art von Hilfe in Form von Vorschlägen oder Algorithmen sind willkommen.

Edit: Ich versuche, die Zeilennummer als Variable übergeben. Ich bin Grepping für ein bestimmtes Muster und wenn gefunden, sollte die Zeilennummer beginnend mit dem Muster übergeben.

+1

Warum in Ihrem Code-Snippet gibt es nichts, was den Zähler erhöht? Bitte, zeigen Sie den richtigen Code, und dann wird die Antwort fast offensichtlich sein. – Arsen7

+0

Gibt es Leerzeichen in '$ LINE'? –

+0

@ Arsen7 Gil

Antwort

11

würde ich sed ‚s addresses verwenden zu einer bestimmten Zeilennummer zu beginnen und bis zum Ende der Datei drucken:

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

Entweder das, oder, wie Fredrik vorgeschlagen, verwenden awk:

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

Behalten Sie einfach einen Zähler. Um alle Linien nach einer bestimmten Zeile zu drucken, können Sie wie folgt tun:

#!/bin/bash 

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

oder, warum nicht awk verwenden:

awk 'NR>5' lines.txt 
4

Was ist so etwas wie das?

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

Es ist nicht POSIX kompatibel, aber versuchen Sie Ihre Bash. Natürlich tun Sie, was Sie wollen mit $ Zeile innerhalb While-Schleife.
PS: Ändern Sie die Nummer mit der gewünschten Nummer Zeile und file.name mit dem Dateinamen.

0

Gehen Sie einfach eine bestimmte Anzahl von Zeilen bis zu der gewünschten Nummer und starten Sie Ihre Logik, um den Rest zu lesen.

Es gibt keine Möglichkeit, eine "Text" -Datei zu sparen, Sie können Zeilen nicht überspringen, ohne sie tatsächlich zu lesen. Die Linien sind durch 0x0a und variable Längen begrenzt. Daher muss jeder Begrenzer gescannt und gezählt werden, um eine bestimmte "Zeilennummer" zu erreichen. Es gibt Gimmicks, die dich denken lassen, du hättest sie nicht gelesen, aber du hast es getan.

Verwandte Themen