Допустим, у меня есть массив из n элементов. Каждый элемент представляет собой строку пар координат x, y, разделенных запятыми, например «581 284». Для этих значений x, y не задана длина символов.
Скажем, я хотел вычесть 8 из каждого значения x и 5 из каждого значения y.
Какой самый простой способ изменить x и y независимо друг от друга, без постоянного разделения кроме значений x и y?
например, первый элемент массива "581,284" становится "573,279", второй элемент массива "1013,562" становится "1005,274" и т. д.
Я работал над этой проблемой пару часов (я любитель в bash), и мне казалось, что мой подход был ужасно запутанным.
Обратите внимание, что вышеприведенные апострофы добавлены только для акцента и не являются частью проблемы.
Заранее спасибо, я какое-то время ломал голову над этим сейчас!
Редактировать: следующий отрывок - подход, который я использовал. Я не знаю много о bash, как вы можете сказать.
while read value
do
if [[ -z $offset_list ]]
then
offset_list="$value"
else
offset_list="$offset_list,$value"
fi
done < text.txt
new_offset=${offset_list//,/ }
read -a new_array <<< $new_offset
for value in "${new_array[@]}"
do
if [[ $((value%2)) -eq 1 ]]
then
value=$((value-8));
new_array[$counter]=$value
counter=$((counter+1));
elif [[ $((value%2)) -eq 0 ]]
then
value=$((value-5));
new_array[$counter]=$value
counter=$((counter+1));
fi
done
По сути, я первоначально прочитал пары координат и убрал из них запятые, а затем планировал модифицировать нечетные / четные значения, которые были добавлены в новый массив. В этот момент я понял, что должен быть более эффективный путь.