首页 > 解决方案 > 增加参数文件中用点分隔的数字

问题描述

我的 params.txt 中的参数很少

config_version = "1.2.3" 

test_version = "1.2.3" 

version_count = "1.2.3" 

service_name = "test"

已经有这个论坛的答案如何获得这个数字作为输出:

awk 'BEGIN{FS="[ \"]+"}/config_version =/{print $3}' /dir/params.txt

我需要为每个 awk 一个班轮运行增加 config_version 值的数量 +1。例子:

第一个值为 1.2.3,在 awk 命令运行后 --> 1.2.4 并保存回文件

第一个值为 1.200.1,在 awk 命令运行后 --> 1.200.2 并保存回文件

第一个值是 8.999.99,在 awk 命令运行后 --> 9.000.0 并保存回文件

每次运行 awk 命令后,params.txt config_version 将更新为增加的值

执行 5 次 awk 脚本后的 params.txt:

config_version = "1.2.8" 

test_version = "1.2.3" 

version_count = "1.2.3" 

service_name = "test"

这一切都在 Gitlab CI 上运行,我可以使用的选项只有一个。

"Gitlab job run (1) -> take 1.200.0 -> change to 1.200.1"

"Gitlab job run (2) -> take 1.200.1 -> change to 1.200.2"

"Gitlab job run (10) -> take 1.200.9 -> change to 1.201.0"

"Gitlab job run (xx) -> take 1.999.9 -> change to 2.000.0"

命令将在gitlab ci

标签: awkgrepincrement

解决方案


另一个awk 使用@EdMorton 的输入文件

$ awk 'function join(a,k,s,sep) {for(k in a) {s=s sep a[k]; sep="."}
                                 return s}
       BEGIN {FS=OFS="\""}
       /^config_version / {for(i=split($2,v,"."); i; i--)
                               {if(length(v[i]+1) > length(v[i]) && i>1) gsub(/./,0,v[i]); 
                                else {v[i]++; break}}
                           $2=join(v)}1' file


config_version = "1.9.9"
config_version = "1.9.90"
config_version = "2.0.0"
config_version = "1.9.99"
config_version = "1.99.0"
config_version = "2.00.0"
config_version = "1.999.0"
config_version = "10.000.0"
config_version = "9.99.99.000.0"
config_version = "10.00.00.000.0"

将数字拆分为组件并实现全加器,最后将数字连接并打印。


推荐阅读