Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 减少版本号_Shell_Awk_Version - Fatal编程技术网

Shell 减少版本号

Shell 减少版本号,shell,awk,version,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 $

我正在创建一个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?

稍微
bash
sed

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' 

你的问题不清楚,所以如果这不是你想要的:

$ 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

然后编辑您的问题,以澄清您试图做什么,并提供可测试的样本输入/输出。

但如果存在1.0.10,该怎么办?请澄清目标是使用点分隔的数字进行倒计时,还是使用已知版本的列表(可能从更改日志文件中提取)进行倒计时。这就是我想要的,我可以用$current版本替换1.1.4,用$target版本替换1.0.9。但我希望它能在shell脚本中工作,但事实并非如此。同样,如果它不能满足你的要求,那么你必须编辑你的问题,以澄清这是什么。