我有一个以这种方式从文件中读取数据的程序
root@root# myprogram < inputfile.txt
现在我希望我的程序从第3行而不是从文件的开头读取输入文件。
我必须使用< inputfile.txt
。由于可变范围问题,我无法使用管道调用
在Linux中有没有办法做到这一点?
答案 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