LINUX.ORG.RU

выбрать значение из файла (bash csript)


0

0

Мне много раз помогали на это форуме, поэтому я снова тут :-) В общем, есть текстовый файл (test) в нем есть строчка такого рода: traffic: <число1>:<число2>+<число3>:<число4>+<число5>:<ч исло6>

Необходимо получить быстрый доступ к этим <числоN>, чтобы ее значение можно было передать переменной (6-ти переменным). Как это красивее сделать средствами баша? Что-то мне подсказывает, что, "взять" значение так: chislo2=`cat test |grep traffic|awk -F+ '{print $1}'|awk -F: '{print $2}'` будет не очень рационально.

anonymous

Re: выбрать значение из файла (bash csript)

man cut

SatanClaus ★★★ ()

Re: выбрать значение из файла (bash csript)

ну в любом случае тебе придется проход по файлу делать.

LINE=`cat test | awk '/^traffic / { print; exit }'`

а дальше парси эту строку как хочешь..

dilmah ★★★★★ ()

Re: выбрать значение из файла (bash csript)

Примерно так:
{
   read N1
   read N2
   ...
   read N7
} < <(tr '+' ':' < test|awk -F: '$1=="traffic" {
   print $2
   print $3
   ...
   print $7
}')

`<(command)' - башизм и Z-шизм, и на других shell может не работать.
Создает временный fifo. Если нужна переносимость, то fifo создавай явно.

Еще можно сделать через eval. Похожий вопрос недавно всплывал на этом форуме - в поиск.

kosmonavt ()

Re: выбрать значение из файла (bash csript)

-F в awk --- это regexp, так что, можно не городить два awk'а, а обойтись одним. И grep не нужен, раз уж awk. И cat с лишним прогоном через pipe тоже. В общем, awk велик и могуч :)

watashiwa_daredeska ★★★★ ()

Re: выбрать значение из файла (bash csript)

eval `awk -F "[\+:]" '/^trafic/ {print "var1=" $2 "; var2=" $3}' test`

ну и соответственно прописать столько пар "varN=" $N+1, сколько нужно

ananas ★★★★★ ()

Re: выбрать значение из файла (bash csript)

$ IFS=":+" read -a x < <(echo 6:5+4:3+2:1)
$ echo ${x[5]}
1
$ echo ${x[0]}
6

io ★★ ()

Re: выбрать значение из файла (bash csript)

IMHO так будет наиболее быстро (если там только одна строка):

STRING=`cat file`
X=1

while true; do
eval VAR${X}=`echo ${STRING}|cut -d ':' -f ${X}`
let X=X+1
if [ ${X} -eq 6 ]; then break; fi
done

saper ★★★★★ ()

Re: выбрать значение из файла (bash csript)

однако, TIMTOWDY

(я не автор вопроса ;)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.