【发布时间】:2014-07-16 13:15:26
【问题描述】:
我有一个程序以这种方式从文件中读取数据
root@root# myprogram < inputfile.txt
现在我希望我的程序从第 3 行而不是从文件开头读取输入文件。
我必须使用< inputfile.txt。由于变量范围问题,我无法使用管道调用
有没有办法在 Linux 中做到这一点?
【问题讨论】:
我有一个程序以这种方式从文件中读取数据
root@root# myprogram < inputfile.txt
现在我希望我的程序从第 3 行而不是从文件开头读取输入文件。
我必须使用< inputfile.txt。由于变量范围问题,我无法使用管道调用
有没有办法在 Linux 中做到这一点?
【问题讨论】:
也许这对你有用(进程替换):
program < <(sed -n '3,$p' inputfile.txt)
【讨论】:
sed '1,2d' file
纯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
【讨论】:
你可以使用tail:
tail -n +3 inputfile.txt | myprogram
在 bash 中,也可以使用
myprogram < <(tail -n +3 inputfile.txt)
【讨论】:
< inputfile.txt。由于变量范围问题,我无法使用管道调用
试试这个命令:sed -n '3,$p' inputfile.txt | myprogram
【讨论】: