2016-05-20 1 views
0

У меня 1.0.5. Как я могу увеличить до 1.0.6?Linux: приращение

Пробовал это, но он не работает.

echo 1.0.5 0.0.1 | awk '{sum=$1+$2; printf"%0.2f\n", sum }' 
+2

1.0.5 не десятичное число. 1.05 или 10.5 - десятичные числа. – fpmurphy1

+0

Более того, что бы вы ожидали 1.0.9 + 0.0.1 (1.0.10 или 1.1.0)? Или 5.7.9 + 8.7.6 быть? Или 7.5 + 6.7? – abligh

ответ

2

Как @fpmurphy отметил 1.0.5 в основном строкой, вы не можете разобрать его в виде десятичной дроби.

разделите его, а затем увеличить его следующим образом:

echo 1.0.5 |cut -d'.' -f3 | awk '{sum=$1+1;printf"%s",sum}' 

Это увеличивает последнюю часть string.Append его к первой части, чтобы получить желаемый результат.

+0

На самом деле, это просто не выводит «6» (не «1.0.6»)? И если вы добавите «1.0.9», вы получите «10». – abligh

0

Альтернативное прочтение проблемы в @Ramblers - это увеличивает число, как если бы оно было без точки десятичного:

echo 1.0.5 | perl -pe 's/\.//g;$_++;s/(\d)/$1./g;s/\.$/\n/;' 

IE он будет идти

1.0.5 ... 1.0.9 1.1.0 ... 1.9.9 2.0.0 ... 9.9.9 1.0.0.0 1.0.0.1

Давайте разберем, что Perl :

perl -pe '  // Read each line of the input 
s/\.//g;  // Remove dots 
$_++;   // Increment number, dropping trailing \n 
s/(\d)/$1./g; // Replace each digit by that digit followed by a dot 
s/\.$/\n/;  // Replace the trailing dot by a trailing \n 
'    // Output the line (per -p) 
+1

Мне это не нравится. Вы переходите от основной версии 9 к основной версии 1? Кто ты, Майкрософт? –

+0

@glennjackman Он идет от основной версии от 9.9 до 1.0.0. Поскольку вопрос был фундаментальным, плохо указанным (см. Мой комментарий по этому вопросу), трудно понять, что это за намерение. – abligh

0

Вот кусок рубина для добавления каждая часть строки версии:

ruby -e ' 
    version = ARGV.shift.split(".") 
    increment = ARGV.shift.split(".") 
    newver = version.zip(increment).map do |ary| 
     ary.map {|elem| elem.to_i} 
      .reduce(:+) 
    end 
    puts newver.join(".") 
' 1.2.3 0.8.8 

выходы

1.10.11 

Как нечитаемым Oneliner

$ ruby -e 'puts ARGV.shift.split(".").zip(ARGV.shift.split(".")).map {|a| a.map {|e| e.to_i}.reduce(:+)}.join(".")' 1.2.3 0.8.8 
1.10.11 
0

Для другого пути, вы могли бы использовать это ...

$ echo 1.0.4 | awk -F '[/.]' '{n=$1$2$3; print n+1}' | fold -w1 | paste -sd. 
1.0.5 

$ echo 1.0.9 | awk -F '[/.]' '{n=$1$2$3; print n+1}' | fold -w1 | paste -sd. 
1.1.0 

$ echo 1.9.9 | awk -F '[/.]' '{n=$1$2$3; print n+1}' | fold -w1 | paste -sd. 
2.0.0 

$ echo 9.9.9 | awk -F '[/.]' '{n=$1$2$3; print n+1}' | fold -w1 | paste -sd. 
1.0.0.0 

Это не работает хорошо, если версия такова, как показано ниже:

$ echo 9.19.8 | awk -F '[/.]' '{n=$1$2$3; print n+1}' | fold -w1 | paste -sd. 
9.1.9.9 

Надежда это полезно ..