我有這個回圈,它允許我只處理模擬中的某些時間步長:
let ALLSTEPS=820000
for ((step=20000; step <= ALLSTEPS; step =20000)); do
echo "Step: $step"
...
在回圈中,我需要從外部檔案的每一行讀取一行。這就是我所擁有的:
i=$((step));
k=$(sed "${i}q;d" externalFile.txt)
echo ${k%}
這不起作用,因為在外部檔案中,我的行是:1、2、3、4 等,而“步驟”是“20000、40000、60000……”
我可以設定另一個回圈,但這似乎很笨拙,我想知道是否有更干凈的方法來做到這一點?
uj5u.com熱心網友回復:
您可以為每個算術回圈使用多個變數:
ALLSTEPS=820000
for ((i=1, step=20000; step <= ALLSTEPS; i , step =20000)); do
echo "Step: $step, i: $i"
done
uj5u.com熱心網友回復:
與其使用sed(它將通讀整個檔案,只是為了挑出一行),為什么不在read回圈中使用每次通讀下一行?
for ((step=20000; step <= ALLSTEPS; step =20000)); do
IFS= read -r k <&3 # Read the next line from the external file
echo "Step: $step, k: $k"
...
done 3<externalFile.txt
在上面,我使用 FD #3 作為檔案(the3<和<&3stuff),以避免與標準輸入沖突,如果回圈中的任何其他內容從中讀取。
(并且命令中的IFS=and-r內容read是標準方法,read不僅可以閱讀原始行,還可以“幫助”預處理它們。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/366963.html
