この方法でファイルからデータを読み取るプログラムがあります
root@root# myprogram < inputfile.txt
ここで、プログラムがファイルの先頭からではなく、3 行目から入力ファイルを読み取るようにします。
私は使用する必要があります< inputfile.txt
。変数のスコープの問題により、パイプで呼び出すことができません
Linuxでそれを行う方法はありますか?
純粋なシェル、余分なプロセスはありません:
{ read -r; read -r; program; } < inputfile.txt
それぞれの最初の 2 つの呼び出しはread
、 からの入力行を消費するinput file.txt
ため、 には表示されませんprogram
。
$n
これを一般化して、入力の最初の行をスキップできます。
{
while [ "$((i++))" -lt "$n" ]; do read -r; done
program
} < inputfile.txt
bash
これは、いくつかの拡張機能を使用すると、もう少し読みやすくなります。
{ while (( i++ < n )); do read -r; done; program; } < inputfile.txt
使用できますtail
:
tail -n +3 inputfile.txt | myprogram
bashでは、使用することもできます
myprogram < <(tail -n +3 inputfile.txt)
このコマンドを試してください:sed -n '3,$p' inputfile.txt | myprogram