减少版本号

时间:2017-07-06 14:53:14

标签: shell awk version

我正在创建一个while循环,当它到达特定版本时会停止。 问题是,如果我的版本为1.1.4并希望降至1.0.9,那么我在此论坛上找到的awk命令效果不佳。

我正在使用这样的东西:

while compare versions; do

    current version=

    if [[ actual version != current version ]]; then

        currentver=

        previous version=`echo $ current version | awk -F. -v OFS=. \ 
              'NF==1{print ++$NF};
               NF>1{if(length($NF+1)>length($NF))$(NF-1)++;
               $NF=sprintf("%0*d", length($NF), ($NF-1)%(10^length($NF))); 
               print}'`

        Go back to $ previous version

        do something

我得到的是:

Go back to 1.1.4

Go back to 1.1.3

Go back to 1.1.2

Go back to 1.1.1

Go back to 1.1.0

Go back to 1.1.-1

Go back to 1.1.-2

我希望版本号达到1.0.9。

如何更改awk命令不要低于0?

2 个答案:

答案 0 :(得分:0)

一点bashsed

echo "version_1."{104..099} | sed 's/ /\n/g' | sed 's/.\(.$\)/.\1/g;y/_/ /'

输出:

version 1.1.4
version 1.1.3
version 1.1.2
version 1.1.1
version 1.1.0
version 1.0.9

另一种类似的方法:

echo "version_"{114..109} | sed 's/ /\n/g;y/_/ /;s/\([0-9]\)\([0-9]\)/\1.\2./g' 

答案 1 :(得分:0)

如果您不想要的话,您的问题并不清楚:

$ cat tst.awk
function decrement(old,        n,parts) {
    n = split(old,parts,/\./)
    if ( parts[n] == 0 ) {
        parts[n--] = 9
    }
    parts[n]--
    return (parts[1] "." parts[2] "." parts[3])
}
BEGIN {
    val = "1.1.4"
    while ( val != "1.0.9" ) {
        print val
        val = decrement(val)
    }
    print val
}

$ awk -f tst.awk
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9

然后编辑您的问题以澄清您尝试做的事情并提供可测试的样本输入/输出。