
Ich möchte lediglich eine bestimmte Anzahl von Zeilen wie diese angeben lineNumberIs=3
und 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 -r
wird 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.