awk - 增加参数文件中用点分隔的数字
问题描述
我的 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
解决方案
另一个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"
将数字拆分为组件并实现全加器,最后将数字连接并打印。
推荐阅读
- node.js - 如何在 Node.js 中获取现有服务器的实例?
- ssl - SSL 证书/模块错误 - pip 19.2.3 - Anaconda 提示
- python - 如何等待写入文本文件,逐行读取更改并打印?
- android-webview - Javascript注入出错
- python - 如何在python中将ndarray转换为整数
- python - 如何将用户输入保存到文本文件
- flutter - 颤振 - 以相反方向圆形边框
- javascript - 如何使用 axios 将文件上传到 Dropbox
- javascript - 使用 Knex,如何将连接表的相关行作为嵌套对象给出?
- python - 从类中向 Pandas DataFrame 添加列