2017-04-19 73 views
1

給出內容的文件是這樣的:bash腳本增量數

foo: 8.3.1 
bar: 803001 

我需要一個bash腳本來讀取這個文件增量的最後一個數字,並考慮第二行的最後三個數位作爲在XY-X的在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命令將是一個很大的幫助!

+0

固定錯字感謝 - 我需要的是第一線的第三個數字遞增,第二行包含第一行的數字沒有小數點,並採取考慮到第三位可以是000到999:/ – bsautner

回答

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 

根據文件中的其他內容,您可能需要使用語句前的條件限定替換。

+0

幫助我awk,你是我唯一的希望!很好,謝謝! – bsautner

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 
4

騎自行車和輕微打高爾夫球。增量由數字構成的數量在行的結尾:

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