如何让我的程序的输入文件从第3行开始?

时间:2014-07-16 13:15:27

标签: linux bash shell ash

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

root@root# myprogram < inputfile.txt

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

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

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

4 个答案:

答案 0 :(得分:4)

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

program < <(sed -n '3,$p' inputfile.txt)

答案 1 :(得分:3)

您可以使用tail

tail -n +3 inputfile.txt | myprogram

在bash中,您也可以使用

myprogram < <(tail -n +3 inputfile.txt)

答案 2 :(得分: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

答案 3 :(得分:0)

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