Shell 减少版本号
我正在创建一个while循环,当它到达一个特定的版本时停止。 问题是,如果我有1.1.4版,并且想升级到1.0.9版,那么我在这个论坛上发现的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 $
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脚本中工作,但事实并非如此。同样,如果它不能满足你的要求,那么你必须编辑你的问题,以澄清这是什么。