0

我有一个程序以这种方式从文件中读取数据

root@root# myprogram < inputfile.txt

现在我希望我的程序从第 3 行而不是从文件的开头读取输入文件。

我必须使用< inputfile.txt. 由于变量范围问题,我无法使用管道调用

有没有办法在 Linux 中做到这一点?

4

4 回答 4

4

也许这对你有用(进程替换):

program < <(sed -n '3,$p' inputfile.txt)
于 2014-07-16T13:22:25.163 回答
3

您可以使用tail

tail -n +3 inputfile.txt | myprogram

在 bash 中,您还可以使用

myprogram < <(tail -n +3 inputfile.txt)
于 2014-07-16T13:17:27.813 回答
3

纯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
于 2014-07-16T18:44:52.993 回答
0

试试这个命令:sed -n '3,$p' inputfile.txt | myprogram

于 2014-07-16T13:19:48.023 回答