1
for i in $(seq 1 100)
do
   ADDRESS=$(head -$i "$project_name/address" | tail -1 | cut -f2)
   sed -i.old "20s/.\{60\}/&${ADDRESS}/" "Desktop/lscript.ld"
done

私はこれに従ってこのコードを使用しています:

if [[ i = 1 ]]
then
    ADDRESS=$(head -1 "$project_name/address" | tail -1 | cut -f2)
fi

head実行されますが、毎回値を1ずつ増やし たいです。

処刑されたいとき、i=1欲しいから。Bashを使用してこれを行うにはどうすればよいですか?head -2i=2head -3

4

3 に答える 3

1

どうですか:

for i in $(seq 1 100)
do
   ADDRESS=$(head -n $((i + 1)) "$project_name/address" | tail -1 | cut -f2)
   sed -i.old "20s/.\{60\}/&${ADDRESS}/" "Desktop/lscript.ld"
done
于 2012-05-11T07:21:25.750 に答える
1

私は Dennis Williamson が彼のコメントに書いたことに賛同していますが、コードの本体はあまり役に立ちませんが、別のより効率的な方法を示したいと思います。sedADDRESS の割り当てをより明確にするために必要なのすべての機能に既に精通しています。

ADDRESS=$(sed -n "$i"'s/.*\t\([^\t]*\)\t.*/\1/p' "$project_name/address")

nl行番号を取得するためにループを駆動することもできます。

head -n 100 "$project_name/address" |
cut -f2 |
nl |
while read i address; do
    ... do something with $i and $address ...
done
于 2012-05-15T10:20:46.843 に答える
1

を使用して数学を行うことができます(())

$((i + 1))

特に

ADDRESS=$(head -$((i + 1)) "$project_name/address" | tail -1 | cut -f2)

これは の現在の値を変更しませんi(これは によって達成できます$((i++)))

于 2012-05-11T07:31:13.017 に答える