Wie lese ich eine Datei ab einer bestimmten Zeilenanzahl innerhalb von „while read“?

Wie lese ich eine Datei ab einer bestimmten Zeilenanzahl innerhalb von „while read“?

Ich möchte lediglich eine bestimmte Anzahl von Zeilen wie diese angeben lineNumberIs=3und während des Lesens sagen, dass mit dieser dritten Zeile oder einer beliebigen Zeilennummer begonnen werden soll und dass danach Zeilen abgerufen werden sollen, um später einige Befehle auf den abgerufenen Zeilen auszuführen. So ähnlich

 while read line from $lineNumberIs
    do
    **some commands not just echo nor printing on the screen** 
    done < $dataFile

Antwort1

while IFS= read -r line; do
    # ...
done < <(tail -n "+$lineNumberIs" $dataFile)

tail -n +K(mit dem Pluszeichen) weist tail an, bei der angegebenen Zeilennummer zu beginnen (siehedie Manpage).

Das <(...)Bit ist einProzesssubstitution. Damit können Sie eine Befehlssequenz angeben und Bash diese wie eine Datei lesen lassen. Das ist sehr praktisch, wenn Sie die Auswirkungen der in einer Pipeline erstellten Subshell vermeiden möchten.

IFS= read -rwird verwendet, um die Zeile genau so zu lesen, wie sie in der Datei erscheint, ohne dass Leerzeichen oder Escape-Sequenzen entfernt werden.

Antwort2

#!/bin/bash
if [ $# -eq 0 ]; then
        echo "Please execute $0 with linestoskip parameter"
        exit 0
fi
linestoskip=$1
Counter=0
dataFile='/etc/fstab'
while read line
do
        if [ $Counter -ge $linestoskip ]; then
                echo $line
        fi
        Counter=`expr $Counter + 1`
done < $dataFile

Dieses Skript erwartet als Parameter die Anzahl der zu überspringenden Zeilen. Sie können in der inneren if-Bedingung tun, was Sie möchten.

Antwort3

Sehr einfache Lösung -

tail -n +K filename

wobei K = Zeilennummer, ab der Sie die Datei lesen möchten. Dadurch wird die Datei ab der K-ten Zeile bis zum Ende gelesen.

verwandte Informationen