2015-06-28 2 views
0

Я хотел бы использовать sed/awk для увеличения числа чисел в последовательности (в скрипте есть несколько номеров).Увеличение значений с использованием Sed/Awk или другого инструмента/утилиты

Так скажем, у меня есть следующий код:

samplefilename_15.format 
samplefilename_20.format 
samplefilename_25.format 

посмотреть, как все эти увеличения на пять? Есть ли способ увеличить все числа (15, 20 и 25), скажем, пять через sed/awk или другой метод? Итак, когда я запускаю команду/скрипт, числа становятся (20,25,30).

Спасибо за любую помощь.

+0

, что именно вы пытаетесь сделать? –

+0

@Juandelahoz - Измените числа в одном файле на целое число. Это должно помешать мне создать десятки файлов с наборами чисел, которые имеют все изменения. Если вам нужно больше объяснений, скажите об этом. – hallettwx

ответ

2

Если вы можете использовать perl:

perl -ne 's/(?<=_)(\d+)(?=\.)/($1+5)/e && print' filename 

Выход:

samplefilename_20.format 
samplefilename_25.format 
samplefilename_30.format 

Для редактирования файла:

perl -ne 's/(?<=_)(\d+)(?=\.)/($1+5)/e && print' -i filename 

Использовать глобальный модификатор, если у вас есть несколько записей на тот же строка, подлежащая изменению.

perl -ne 's/(?<=_)(\d+)(?=\.)/($1+5)/ge && print' -i filename 
+0

Спасибо. Есть ли способ сделать так, чтобы каждый раз число увеличивалось на пять, а не только в первый раз, когда команда запускалась? – hallettwx

+0

@hallettwx Вы хотите изменить файл? –

+0

Да, это было бы потрясающе. – hallettwx

2

Использование awk:

awk '{ 
    if(match($0, /_[0-9]+\./)) { 
     a = substr($0, 0, RSTART) 
     b = 5 + substr($0, RSTART + 1, RLENGTH - 2) 
     c = substr($0, RSTART + RLENGTH - 1) 
     $0 = a b c } 
    print 
}' 

Выход:

samplefilename_25.format 
samplefilename_30.format 
samplefilename_35.format 
Смежные вопросы