The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"BASH: маленький вопрос"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"BASH: маленький вопрос"  
Сообщение от stakado email(ok) on 05-Июн-07, 12:15 
Драсти!
Подскажите, плиз, как сделать следующее:
есть переменная $xyz следующего содержания:
1 2 3
4 5 6

Как сделать из нее массив из 2х элементов: 1 2 3 --- первый элемент. 4 5 6 - второй элемент?
xyz=($xyz) не катит, потому что получается массив из 6 элементов: первый эл-т: 1, второй: 2 и т.д.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "BASH: маленький вопрос"  
Сообщение от silent_ion on 05-Июн-07, 12:58 
>есть переменная $xyz следующего содержания:
>1 2 3
>4 5 6

как ты получил такую переменную?
Покажи с помощью какого кода такую переменную можно получить...


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "BASH: маленький вопрос"  
Сообщение от perece on 05-Июн-07, 13:28 
>как ты получил такую переменную?
>Покажи с помощью какого кода такую переменную можно получить...
легко, например

xyz='1 2 3
4 5 6'

или

xyz="`cat file`"
#где file содержит несколько строк с пробелами

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "BASH: маленький вопрос"  
Сообщение от vic (??) on 05-Июн-07, 13:33 
>>есть переменная $xyz следующего содержания:
>>1 2 3
>>4 5 6
>
>как ты получил такую переменную?
>Покажи с помощью какого кода такую переменную можно получить...


если строки в переменной разбиты \n например так:
xyz=`echo -e "1 2 3\n4 5 6"

то

$line1=`printf "$xyz\n" | head -1`
$line2=`printf "$xyz\n" | tail -1`
$res_array=("$line1" "$line2")

если пробелы, то надо еще подумать ;) т.к. в общем случае размерности все таки неизвестны :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "BASH: маленький вопрос"  
Сообщение от Oyyo on 05-Июн-07, 16:17 
Драсти!
Подскажите, плиз, как сделать следующее:
есть переменная $xyz следующего содержания:
1 2 3
4 5 6

Как сделать из нее массив из 2х элементов: 1 2 3 --- первый элемент. 4 5 6 - второй элемент?
xyz=($xyz) не катит, потому что получается массив из 6 элементов: первый эл-т: 1, второй: 2 и т.д.

при создании массива
xyz=($xyz)
все елементы разбиваются разделителями содержащимися в переменной $IFS , по умолчанию пробел, табулятор, перевод строки
следующий скрипт решает твою проблему


xyz="1 2 3
4 5 6"

IFS=$'\n'
xyz=( $xyz )

echo ${xyz[0]}
echo ${xyz[1]}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "BASH: маленький вопрос"  
Сообщение от stakado email(ok) on 06-Июн-07, 02:43 
>при создании массива
>xyz=($xyz)
>все елементы разбиваются разделителями содержащимися в переменной $IFS , по умолчанию пробел,
>табулятор, перевод строки
>следующий скрипт решает твою проблему
>
>
 
>xyz="1 2 3
>4 5 6"
>
>IFS=$'\n'
>xyz=( $xyz )
>
>echo ${xyz[0]}
>echo ${xyz[1]}
>

Самое элегантное решение! Спасибо большое за помощь!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "BASH: маленький вопрос"  
Сообщение от perece on 05-Июн-07, 13:26 
for i in `echo $xyz | tr ' ' '~'`
do echo xyz=`echo $i | tr '~' ' '`
done

иначе никак, имхо. хотя мож и я чего не знаю..
(вместо тильды может быть любой _non-whitespace_ символ, гарантированно не встречающийся в xyz. если такового в природе не имеется (там любой символ встретиться может) то вместо tr можно использовать sed, типа sed -e 's/ /=-tuta_+_probel-=/g' , ну и обратно соотв.

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "BASH: маленький вопрос"  
Сообщение от bill (??) on 05-Июн-07, 22:47 
>Драсти!
>Подскажите, плиз, как сделать следующее:
>есть переменная $xyz следующего содержания:
>1 2 3
>4 5 6
>
>Как сделать из нее массив из 2х элементов: 1 2 3 ---
>первый элемент. 4 5 6 - второй элемент?
>xyz=($xyz) не катит, потому что получается массив из 6 элементов: первый эл-т:
>1, второй: 2 и т.д.

c=0
xyz="1 2 3
4 5 6"

echo -e "$xyz" |
while read line
do
    arr[$c]=$line
    echo "$c - ${arr[c]}"
    c=$((c+1))
done


0 - 1 2 3
1 - 4 5 6

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру