如何使用bash打印增量值

时间:2012-05-11 07:17:43

标签: bash

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我希望head -2执行时,i=2我想要head -3。我怎么能用Bash做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用(())

进行数学运算
$((i + 1))

特别是

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

这不会改变i的当前值(可以通过$((i++))实现)

答案 2 :(得分:1)

我正在谈论丹尼斯·威廉姆森在评论中所写的内容,但即使代码的主体没有什么用处,我也希望展示一种不同的,更有效的方式。您已熟悉sed所需的所有功能,以便使ADDRESS分配更加清晰:

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