Chr*_*aaa 0 awk hex decimal increment
一个常见的 CI 构建类型问题,我有一个标头,其中包含我想要在构建之前增加的版本号。
所以测试.h
#define VERSION_PROJECT_MAJOR 01
#define VERSION_PROJECT_MINOR 69
#define VERSION_VENDOR 2
Run Code Online (Sandbox Code Playgroud)
次要版本需要获得 6A。
环境是带有 gnu utils 的 DOS/WIN,所以我认为 awk 是可行的方法,但我不能完全旋转它。构建系统的版本不能就地执行,但我可以忍受。
到目前为止,我已经写了一篇相当不错的俏皮话;
awk "/#define VERSION_PROJECT_MINOR/{$0=$1 \" \" $2 \" \" (strtonum(\"0x\" $3)+1)}1;" test.h
Run Code Online (Sandbox Code Playgroud)
这将版本号设置为106,如何使其输出十六进制???
使用 GNU awk 的non-decimal-data标志:
只需转换为十进制,执行加法,然后转换回十六进制:
awk --non-decimal-data '/MINOR/ {
$3=sprintf("%d", "0x"$3); $3=sprintf("%x",$3+1)
}
1' file
Run Code Online (Sandbox Code Playgroud)
与您的文件:
$ awk --non-decimal-data '/MINOR/ {$3=sprintf("%d", "0x"$3); $3=sprintf("%x",$3+1)}1' file
#define VERSION_PROJECT_MAJOR 01
#define VERSION_PROJECT_MINOR 6a
#define VERSION_VENDOR 2
Run Code Online (Sandbox Code Playgroud)
%x这利用了inprintf返回十六进制的十进制值的事实。
$ awk --non-decimal-data 'BEGIN{printf "%d\n", 0x69}'
105
Run Code Online (Sandbox Code Playgroud)