web-dev-qa-db-fra.com

Comment lire un fichier à partir d'un nombre spécifique de lignes dans le champ "en lecture"?

Tout ce que je veux, c'est spécifier un certain nombre de lignes comme ceci lineNumberIs=3 et dire en lisant de commencer à partir de cette troisième ligne ou quel que soit le numéro de ligne et les lignes d'extraction suivantes pour exécuter certaines commandes plus tard sur les lignes extraites Quelque chose comme ça

 while read line from $lineNumberIs
    do
    **some commands not just echo nor printing on the screen** 
    done < $dataFile
3
while IFS= read -r line; do
    # ...
done < <(tail -n "+$lineNumberIs" $dataFile)

tail -n +K (avec le signe plus) indique à tail de commencer au numéro de ligne spécifié (voir la page de manuel ).

Le bit <(...) est un substitution de processus . Il vous permet de spécifier une séquence de commandes et de laisser bash la lire comme un fichier. C'est très pratique lorsque vous souhaitez éviter les effets du sous-shell créé dans un pipeline.

IFS= read -r est utilisé pour lire la ligne exactement telle qu'elle apparaît dans le fichier, sans espaces ni séquences d'échappement supprimés.

8
glenn jackman
#!/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

Ce script attend le nombre de lignes à ignorer en tant que paramètre. Vous pouvez faire ce que vous voulez dans la condition intérieure si.

3
thefourtheye