
私がしたいのは、このように特定の行数を指定してlineNumberIs=3
、読み取り中にこの3行目または任意の行番号から開始し、その後に行を取得して、取得した行で後でいくつかのコマンドを実行するように指示することです。
そんな感じ
while read line from $lineNumberIs
do
**some commands not just echo nor printing on the screen**
done < $dataFile
答え1
while IFS= read -r line; do
# ...
done < <(tail -n "+$lineNumberIs" $dataFile)
tail -n +K
(プラス記号付き)は、指定された行番号から開始するようにtailに指示します(マニュアルページ)。
ビット<(...)
はプロセス置換. コマンドシーケンスを指定して、bash にファイルのように読み取らせることができます。パイプラインで作成されたサブシェルの影響を回避したい場合に非常に便利です。
IFS= read -r
スペースやエスケープ シーケンスを削除せずに、ファイル内に表示されているとおりに行を読み取るために使用されます。
答え2
#!/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
このスクリプトは、スキップする行数をパラメータとして想定しています。内部の if 条件では好きなことを何でも行うことができます。
答え3
非常にシンプルな解決策 -
tail -n +K filename
ここで、K はファイルを読み取る行番号です。これにより、K 行目から最後までファイルの読み取りが開始されます。