LINUX.ORG.RU
ФорумAdmin

bash получить несколько переменных из строки


0

2

допустим есть строка полученная в результате:
# cat file | grep foobar

149 text1 4215 text2 text3"


нужно получить в скрипте в переменные значения,

VAR1=`cat file | grep foobar | awk '{print $2}'`
VAR2=`cat file | grep foobar | awk '{print $4}'`
VAR3=`cat file | grep foobar | awk '{print $5}'`

как это в скрипте записать в одну строку?


разделить при помощи ; ?

MikeDM ★★★★★ ()

> cat file | grep foobar
Кхм.
grep foobar file - гораздо короче и требует в 2 раза меньше команд.

А ещё было бы интересно узнать логику целевого скрипта. Возможно, её можно оптимизировать или вовсе переписать на другом языке.

AITap ★★★★★ ()

зачем cat, grep и awk, когда и одного достаточно?

VAR1=`awk '/foobar/ {print $2}' file`
VAR2=`awk '/foobar/ {print $4}' file`
VAR3=`awk '/foobar/ {print $5}' file`

хотя это и не самое красивое решение, но 3 форка против 9-и уже улучшение

beastie ★★★★★ ()
Ответ на: комментарий от beastie

ну и bash-only:

VAR=(`awk '/foobar/ {print $2, $4, $5}' file`)
echo ${VAR[0]}
echo ${VAR[1]}
echo ${VAR[2]}

beastie ★★★★★ ()
read VAR1 VAR2 VAR3 < <(awk '/foobar/{print $2,$4,$5}' file)
zolden ★★★★★ ()

>cat file | grep foobar

149 text1 4215 text2 text3"


Это как? В строке же нет foobar?

Ещё одни вариант с bash-массивами:
#!/bin/bash

V=( $( grep foobar file ) )
VAR1=${V[1]}; VAR2=${V[3]}; VAR3=${V[4]}
unset V

mky ★★★★★ ()
eval $(echo '149 text1 4215 text2 text3' | awk '{print "VAR1=" $2 "; VAR2=" $4 "; VAR3=" $5 }')
DRVTiny ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.