Другие могут придумать что-нибудь попроще (например: sed, awk, ...), но этот быстрый и грязный скрипт работает.Предполагается, что ваш входной файл точно такой же, как вы отправили:
this is my script.
x 55;
y 106;
И код:
#!/bin/bash
#
if [ $# -ne 1 ]
then
echo "ERROR: usage $0 <file>"
exit 1
else
inputfile=$1
if [ ! -f $inputfile ]
then
echo "ERROR: could not find $inputfile"
exit 1
fi
fi
tempfile="/tmp/tempfile.$$"
>$tempfile
while read line
do
firstelement=$(echo $line | awk '{print $1}')
if [ "$firstelement" == 'x' ]
then
secondelement=$(echo $line | awk '{print $2}' | cut -d';' -f1)
(( secondelement = secondelement + 5 ))
echo "$firstelement $secondelement;" >>$tempfile
else
echo "$line" >>$tempfile
fi
done <$inputfile
mv $tempfile $inputfile
Таким образом, он читает строку входного файла в каждой строке.Если строка начинается с переменной x, она берет следующее число, набирает +5 и выводит его во временный файл.Если строка не начинается с x, она выводит строку без изменений во временный файл.Наконец, временный файл перезаписывает входной файл.
Скопируйте этот код в файл, сделайте его исполняемым и запустите его с входным файлом в качестве аргумента.