Shell:如何在变量中递增第一个出现的整数

时间:2017-10-11 04:08:48

标签: shell awk

我有

$string1=\-9-0  ---> $increment1=\-10-0
$string2=\-99   ----> $increment2=\-100
$string3=\-999-0-4 --> $increment3=\-1000-0-4

我需要将第一个出现的整数增加到+1值,整数以-为前缀

2 个答案:

答案 0 :(得分:1)

使用 awk

awk 'BEGIN{FS=OFS="-"} {$2=$2+1; print}' <<<$string1

说明:

我们已将字段分隔符/分隔符设置为FS-, 因此,在字符串-9-0中,第二个字段为9 然后我们按$2递增1。另外OFS=-以便在打印字段时-作为分隔符包含在内,否则awk会默认将空格视为分隔符。

将其存储回变量:

$ string1=$(awk 'BEGIN{FS=OFS="-"} {$2=$2+1;}1' <<<$string1)

$ echo $string1
-10-0


$ string3=$(awk 'BEGIN{FS=OFS="-"} {$2=$2+1;}1' <<<$string3)

$ echo $string3
-1000-0-4

答案 1 :(得分:1)

使用awk

<强>一衬垫:

awk  'BEGIN{FS=OFS="="}match($2,/[0-9]+/){sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)}1' infile

或者甚至这适用于给定的输入样本

awk -F'[^[:digit:]]+' '{t=$0; sub(/-[0-9]+/,"-"$3+1,t); print t }' infile

<强>输入:

$ cat infile
$string1=\-9-0  
$string2=\-99   
$string3=\-999-0-4 

<强>输出:

$ awk  'BEGIN{FS=OFS="="}match($2,/[0-9]+/){sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)}1' infile
$string1=\-10-0  
$string2=\-100   
$string3=\-1000-0-4 

$ awk -F'[^[:digit:]]+' '{t=$0; sub(/-[0-9]+/,"-"$3+1,t); print t }' infile
$string1=\-10-0  
$string2=\-100   
$string3=\-1000-0-4 

更好的可读性:

awk  '
      BEGIN{
             FS=OFS="="
      }
      match($2,/[0-9]+/){
            sub(/[0-9]+/,substr($2,RSTART,RLENGTH)+1,$2)
      }1
     ' infile