
Пример моего текстового файла:
03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...
В этом тексте я должен заменить число, base/
следуя этим правилам:
if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10
Желаемый результат:
03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208
Есть идеи, как это сделать?
решение1
В Perl легко сопоставить контекстивыполните сложение:
perl -pe 's,base/\K\d+,$& + 5,e' input_file
Мы сопоставляем все, что имеет вид , забываем о первой части (до ) и заменяем остальное на то, что было сопоставлено ( ) плюс 5. делает замену выражением Perl, а не просто строкой.base/<numbers>
\K
$&
e
решение2
awk
можно воспользоваться тем фактом, что это +5
операция над каждым числом:
awk -F'/' '{$5+=5 ; print}' OFS='/' input_file
При использовании /
в качестве разделителя полей для ввода ( -F'/'
) и вывода ( OFS='/')
, соответственно, к полю номер 5 необходимо добавить 5.
Обратите внимание, что здесь решающее значение имеют положение и количество косых черт.
решение3
sed
должно сработать:
sed \
-e 's/base\/1/base\/6/' \
-e 's/base\/2/base\/7/' \
-e 's/base\/3/base\/8/' \
-e 's/base\/4/base\/9/' \
-e 's/base\/5/base\/10/' \
-e 's/base\/0/base\/5/'
Я думаю, что случай «база/0» нужно поставить последним, в противном случае вступит в силу и случай 5 -> 10.