我有一个程序以这种方式从文件中读取数据
root@root# myprogram < inputfile.txt
现在我希望我的程序从第 3 行而不是从文件的开头读取输入文件。
我必须使用< inputfile.txt
. 由于变量范围问题,我无法使用管道调用
有没有办法在 Linux 中做到这一点?
也许这对你有用(进程替换):
program < <(sed -n '3,$p' inputfile.txt)
您可以使用tail
:
tail -n +3 inputfile.txt | myprogram
在 bash 中,您还可以使用
myprogram < <(tail -n +3 inputfile.txt)
纯shell,没有额外的进程:
{ read -r; read -r; program; } < inputfile.txt
对每个调用的前两个调用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
试试这个命令:sed -n '3,$p' inputfile.txt | myprogram