我正在创建一个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?
答案 0 :(得分: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'
答案 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
然后编辑您的问题以澄清您尝试做的事情并提供可测试的样本输入/输出。