我有一個計劃,以這種方式如何使我的程序的輸入文件從第3行開始?
[email protected]# myprogram < inputfile.txt
現在我想我的程序讀取來自3號線輸入的文件,而不是從文件的開頭從文件中讀取數據。我需要使用< inputfile.txt
。我不能用管道調用,因爲可變範圍問題
在Linux中有沒有辦法做到這一點?
我有一個計劃,以這種方式如何使我的程序的輸入文件從第3行開始?
[email protected]# myprogram < inputfile.txt
現在我想我的程序讀取來自3號線輸入的文件,而不是從文件的開頭從文件中讀取數據。我需要使用< inputfile.txt
。我不能用管道調用,因爲可變範圍問題
在Linux中有沒有辦法做到這一點?
純殼,沒有多餘的處理:
{ 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)
我必須使用'
@MOHAMED:總是有解決範圍問題的方法。請具體詢問你需要什麼,所以我們可以給出一個全面的答案。 –
試試這個命令:sed -n '3,$p' inputfile.txt | myprogram
也許這會爲你(進程替換)工作:
program < <(sed -n '3,$p' inputfile.txt)
或「反向」:'sed'1,2d'文件' –
謝謝,簡單和最好的答案 – MOHAMED