bash脚本增量编号,以零前缀结尾

时间:2017-04-19 20:17:46

标签: bash awk scripting

给出一个包含以下内容的文件:

foo: 8.3.1
bar: 803001

我需要一个bash脚本来读取此文件增加最后一位数字,并将第二行的最后三位数视为xyx中z的空间增长到三位数(并覆盖原始数据)文件包含新数据:

输入1:

foo: 8.3.1
bar: 803001

输出1:

 foo: 8.3.2
 bar: 803002

输入2:

foo: 8.3.9
bar: 803009

输出2:

 foo: 8.3.10
 bar: 803010

输入3:

foo: 8.3.199
bar: 803199

输出3:

 foo: 8.3.200
 bar: 803200

我可以在2秒内在java中执行此操作,但我需要在shell脚本中执行此操作,否则我将面临构建团队无休止的嘲弄。

如果没有一些粗略的字符串拆分,任何光滑的sep命令都将是一个很大的帮助!

3 个答案:

答案 0 :(得分:7)

awk救援!

 awk -v d='.' '{n=split($2,v,d); 
                if (n>1) $2=v[1] d v[2] d v[3]+1; 
                else $2++}1' file

根据文件中的其他内容,您可能需要在声明之前使用条件限定替换。

答案 1 :(得分:4)

while read key val _; do
  val_left="${val%.*}" val_right="${val##*.}"
  printf '%s ' "$key"
  [[ $val = *.* ]] && printf '%s.' "$val_left"
  printf '%d\n' $(( 1+val_right ))
done

答案 2 :(得分:4)

Bikeshedding并略微打高尔夫球。增加行尾数字形成的数字:

perl -i -pe '/^(foo|bar):/ && s/\d+$/$&+1/e;' input