2017-10-11 53 views
1

殼牌:如何遞增一個變量

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

我只是需要增加至+1值第一次出現整數和整數與-

+0

爲什麼字符串改爲增加?你也應該發佈你試圖解決這個問題...... – Sundeep

+0

試圖區分增量字符串如何看起來像一個例子。我沒有解決它尋求幫助獲得解決方案 –

+0

你需要更好地格式化問題,把輸入和輸出到兩個單獨的代碼塊......只改變你需要改變的東西......這個論壇是關於得到的幫助,你嘗試過的代碼,但沒有工作..而不是獲得完整的代碼... – Sundeep

回答

1

使用AWK前綴首先發生的歷史整數

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

說明:

我們設置了字段分隔符/分隔符,即FS-, 因此在字符串-9-0第二個字段將是9
然後我們遞增$21。也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 
+0

這就是我需要的。感謝蝙蝠俠的救援:) –

+0

你能解釋一下代碼嗎? –

+1

@AkshayHegde:謝謝我已經更新了答案。 – batMan

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 
+0

很好的答案,感謝您的幫助。我們可以做同樣的事情,而不是文件輸入。我們可以做回聲「\ -9」| awk .....應該給我\ -10。 –

+0

真棒..謝謝 –