从修订字符串中导出先前的数字

时间:2016-12-14 01:18:32

标签: bash shell unix awk scripting

  #bash shell
  new="r.9.9.10.6.00999"
  new_ver=${new##*[!1-9]}; prefix=${new%%$new_ver}
  old=${prefix}$((new_ver-1))
  echo old=${old} ###prints old=r.9.9.10.6.00998

但不适合:

  new="r.9.9.10.6.00100" #need to make old=r.9.9.10.6.00099
  new="r.9.9.10.6.01000" #need to make old=r.9.9.10.6.00999

因为new_ver变空了,在这种情况下获取上一版本的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

这比您的解决方案稍微不那么脆弱:

awk 'BEGIN {FS = OFS = "."} {$NF = sprintf("%0*d", length($NF), --$NF)} 1'
  1. 将输入和输出字段分隔符设置为.

  2. 每行,选择最后一个字段

  3. 捕获最后一个字段的长度,因此我们可以保持相同

  4. 从值

  5. 中减去1
  6. 设置新值,确保在需要时使用正确的0前缀

  7. 打印修改后的行