Awk
在shell中添加三個點浮點數
我正在嘗試使用以下命令將 5.34.03 數字附加到 5.34.04
$ awk '{print 5.34.03 + 0.0.1}' 5.340.030.1
預期產出
5.34.13
我嘗試了很多方法,例如。讓,但它沒有用。
假設您的次要版本和更新檔版本號應該是 2 個字元,您可以使用這個 awk 腳本:
解析.awk
BEGIN { FS = "[ .]"; OFS = "." } function tonum(s) { if( length(s) < 2 ) s *= 10 return s } function tover(n) { if( n < 10 ) n = "0" n return n } { print $1 + $4, tover( tonum($2) + tonum($5) ), tover( tonum($3) + tonum($6) ) }
像這樣執行它:
echo 5.34.03 0.0.1 | awk -f parse.awk
輸出:
5.34.13
在 bash 中,您可以使用 IFS 拆分每個版本字元串並使用其編號填充數組。然後使用參數擴展來獲取數字的長度並使用
printf
來格式化結果數字:#! /bin/bash v=5.34.03 a=0.0.1 IFS=. v=($v) a=($a) shopt -s extglob for ((i=0; i<${#v[@]}; i++)) ; do v[i]=${v[i]%%+(0)} a[i]=${a[i]%%+(0)} v_length=${#v[i]} a_length=${#a[i]} v[i]=${v[i]##+(0)} a[i]=${a[i]##+(0)} if (( v_length < a_length )) ; then length=$a_length (( v[i] *= 10 ** (a_length - v_length) )) else length=$v_length (( a[i] *= 10 ** (v_length - a_length) )) fi (( v[i] += a[i] )) v[i]=$(printf %0"$length"d ${v[i]}) done IFS=. echo "${v[*]}" IFS=$' \t\n'
我需要處理前導零和尾隨零,因為像 010 這樣的數字被視為八進制。