[Решено] Считать цифры разделенные знаком в переменные из файла. (лучше используя sed или awk)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

[Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение ffldove »

Всем доброе время суток.
Есть скрипт в котором используется несколько изменяющихся переменных (пусть для примера их 3) записанных в файле filename разделенных точками, тоесть
55.44.33

Требуется sed или awk записать эти цифры в переменные a1, a2, a3 как цифры для дольнейщего арифметического использования.
I learned something today
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение /dev/random »

Ни sed, ни awk писать в переменные шелла не могут. В любом случае читать придётся read'ом, пусть и после обработки sed'ом / awk'ом / чем-то ещё.
Например:
read a1 a2 a3 < <(cat file | tr '.' ' ')
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение SLEDopit »

/dev/random писал(а):
12.12.2009 19:12
В любом случае читать придётся read'ом
ну можно и без рида. только тогда обращаться придется не к a1, a2, a3, а как к $1, $2, $3

Код: Выделить всё

set `sed 's/./ /g' file`
ну это для однострочных файлов. если строк много, то так не пойдет.
а в случае с awk и вовсе можно прямо в нем проделать необходимые операции над переменными.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение ffldove »

/dev/random писал(а):
12.12.2009 19:12
Ни sed, ни awk писать в переменные шелла не могут. В любом случае читать придётся read'ом, пусть и после обработки sed'ом / awk'ом / чем-то ещё.
Например:
read a1 a2 a3 < <(cat file | tr '.' ' ')

Что то я не понял сделал скрипт

Код: Выделить всё

read a b c < <(cat file | tr '.' ' ')
echo $a

ошибка
script.sh: line 1: syntax error near unexpected token `<'
script.sh: line 1: `read a b c < <(cat file | tr '.' ' ')'

Из консоли последовательно те же команды работают.
[ffldove@ffl dir]$ read a b c < <(cat file | tr '.' ' ')
[ffldove@ffl dir]$ echo $a
11
[ffldove@ffl dir]$ let a+=55
[ffldove@ffl dir]$ echo $a
66

Что не так делаю?
I learned something today
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение /dev/random »

ffldove писал(а):
12.12.2009 19:57
Что не так делаю?

скрипт нужно запускать не через sh, а через bash.

Ну или изменить синтаксис на такой, который sh тоже понимает:
read a b c <<<$(cat file | tr '.' ' ')
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение drBatty »

ffldove писал(а):
12.12.2009 19:06
Есть скрипт в котором используется несколько изменяющихся переменных (пусть для примера их 3) записанных в файле filename разделенных точками, тоесть
Цитата
55.44.33

Требуется sed или awk записать эти цифры в переменные a1, a2, a3 как цифры для дольнейщего арифметического использования.

/dev/random писал(а):
12.12.2009 19:12
Ни sed, ни awk писать в переменные шелла не могут. В любом случае читать придётся read'ом, пусть и после обработки sed'ом / awk'ом / чем-то ещё.

нет. sed - может

Код: Выделить всё

$ echo "1.2.3" | sed 's/\./+/g; s/.*/echo "&"|bc/e'
6
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение t.t »

drBatty писал(а):
05.03.2010 18:12
/dev/random писал(а):
12.12.2009 19:12
Ни sed, ни awk писать в переменные шелла не могут. В любом случае читать придётся read'ом, пусть и после обработки sed'ом / awk'ом / чем-то ещё.
нет. sed - может

Код: Выделить всё

$ echo "1.2.3" | sed 's/\./+/g; s/.*/echo "&"|bc/e'
6
И где же здесь "переменные шелла"? (;
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение drBatty »

t.t писал(а):
07.03.2010 10:32
drBatty писал(а):
05.03.2010 18:12
/dev/random писал(а):
12.12.2009 19:12
Ни sed, ни awk писать в переменные шелла не могут. В любом случае читать придётся read'ом, пусть и после обработки sed'ом / awk'ом / чем-то ещё.
нет. sed - может

Код: Выделить всё

$ echo "1.2.3" | sed 's/\./+/g; s/.*/echo "&"|bc/e'
6
И где же здесь "переменные шелла"? (;

а в условии задачи небыло переменных. ТС предлагал переменные как один из вариантов решения. И я считаю, что переменные тут не только не обязательны, но и даже вредны. Задача была - "считать цифры из текста для их анализа" - bash практически не умеет ни работать с текстом, ни с числами, и потому решение - использовать утилиту для работы с текстом (sed), которая передаёт найденные числа в утилиту для работы с арифметикой (bc). bash тут лишний. это видно по предыдущим решениям.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [Решено] Считать цифры разделенные знаком в переменные из файла.

Сообщение t.t »

Вы процитировали "ни sed, ниawk писать в переменные шелла не могут" и ответили "нет, sed - может". Т.е. Ваш ответ был неверен только по его буквальному смыслу; в отношении первоначальной задачи всё правильно.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: