Замена всех чисел их валютным форматом в заданной строке текста
-
20-09-2019 - |
Вопрос
Я хочу написать программу-оболочку (AWK, Sed тоже подойдет), которая будет принимать в качестве входных данных ОДНУ строку текста.
Который будет содержать произвольно распределенные целочисленные строки в нем.например, g
"12884 и 111933 - это два числа, и 323232 - это тоже число"
Я хочу, чтобы результат был
"12,884 и 1,11,933 - это два числа, и 2,23,232 - это тоже число"
Если бы это был PHP, простой preg_replace_callback послужил бы цели, но я хочу, чтобы это было в оболочке.:/
Любые указания были бы очень полезны.
Решение
Нет необходимости разделять строку с помощью tr
.Вы можете воспользоваться функцией разделения слов Bash:
line="12884 and 111933 are two numbers and 323232 is also a number"
for word in $line
do
if [[ $word = *[^0-9]* ]]
then
printf "%s " $word
else
printf "%'d " $word
fi
done
Я также использовал globbing для проверки последовательности цифр, вместо того чтобы полагаться на что-то, что создает ошибку или нет, в зависимости от того, является ли это целым числом.
Другие советы
for line in $(echo "12884 and 111933 are two numbers and 323232 is also a number"
| tr ' ' '\n');
do
if [ $line -eq $line 2> /dev/null ];
then printf "%'d\n" $line;
else
echo $line;
fi;
done | tr '\n' ' '
Я понимаю, это может быть долго и некрасиво, но на данный момент это лучшее, что я мог сделать, я надеюсь, что это поможет.
Далее следует объяснение:
- сначала я разделяю строку на несколько строк, чтобы я мог зацикливаться и распознавать, какие строки являются числовыми, а какие нет
- затем я проверяю, является ли текущая строка числом
- если это число, которое я анализирую с использованием printf
- если это не так, я просто повторяю это, оставляя все как было
- завершите цикл и верните все на одну линию