Найти и заменить все числа после строкового значения и увеличивать каждое - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь понять, смогу ли я найти / заменить и увеличить целочисленное значение в пару строк. Чтобы объяснить, у меня есть следующий текст:

&sr=1240000000000&type=game&scoreA=x&scoreB=y&
&sr=1150000000000&type=game&scoreB=x&scoreB=y&
&sr=1270000000000&type=game&scoreC=x&scoreB=y&
&sr=1010000000000&type=game&scoreD=x&scoreB=y&

Я хочу заменить ТОЛЬКО число после sr= до ... &, например, как показано жирным шрифтом:

& = ср 1240000000000 & тип = игра & scoreA = х & scoreB = у &

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

Так что в идеале, когда я использую сценарий следующим образом (принимая 2 аргумента, первым является значение для замены и входной файл):

. / Script.sh 1500000000000 file.txt

он должен заменить все как:

&sr=1500000010000&type=game&scoreA=x&scoreB=y&
&sr=1500000020000&type=game&scoreB=x&scoreB=y&
&sr=1500000030000&type=game&scoreC=x&scoreB=y&
&sr=1500000040000&type=game&scoreD=x&scoreB=y&

Я собрал скрипт на python для достижения этой цели, но мне было интересно, кто-нибудь может посоветовать мне сделать это в скрипте с 1-3 строками, возможно, используя AWK / SED. Мой скрипт на Python довольно длинный.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вам не нужен bash-скрипт, awk может справиться с этим самостоятельно

awk -v num=1500000000000 '{num += 10000; sub(/^&sr=[0-9]+/, "\\&sr=" num)}1' file > tmpfile
mv tmpfile file
0 голосов
/ 13 ноября 2018

Вы можете использовать это awk:

awk -v n='10000' -v s='1500000000000' 'sub("sr=[0-9]+&", "sr=" (s+i+n) "\\&"){
i+=n} 1' file

&sr=1500000010000&type=game&scoreA=x&scoreB=y&
&sr=1500000020000&type=game&scoreB=x&scoreB=y&
&sr=1500000030000&type=game&scoreC=x&scoreB=y&
&sr=1500000040000&type=game&scoreD=x&scoreB=y&
...