Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: loshiat в Jun 14, 2010, 11:30



Титла: проблем със set -A array
Публикувано от: loshiat в Jun 14, 2010, 11:30
#/bin/bash
aa=20
ab=26
ac=32
ad=6
set -A <array1> aa ab ac ad
echo "array1 is: $array1"

искам тези стойности да влезат в масив array1 и след това той да се визуализира. Другото нещо което искам е да се изведат двете най големи стойности, което не знам от къде да почна. Четох, четох.... не успява. Моля за помощ или дайте линк къде да прочета...


Титла: Re: проблем със set -A array
Публикувано от: borovaka в Jun 14, 2010, 11:43
Не съм се занимавал с bash скриптове, но по-принцип за да селектираш информация от масив ти трябва някакъв loop който да го претървса и условеи за филтиране на резултатите.
Ето тук има guide за bash, предполагам ще ти е полезно:
http://tldp.org/LDP/abs/html/ ($2)


Титла: Re: проблем със set -A array
Публикувано от: radoulov в Jun 14, 2010, 13:57
При bash синтаксисът е друг:

Код
GeSHi (Bash):
  1. aa=20 ab=26 ac=32 ad=6
  2.  
  3. arr=(
  4.  "$aa" "$ab" "$ac" "$ad"
  5.  )
  6.  
  7. printf 'all elements of $arr:\n'
  8.  
  9. printf '%s\n' "${arr[@]}"
  10.  
  11. printf 'top 2:\n'
  12.  
  13. printf '%s\n' "${arr[@]}" |
  14.  sort -nr |
  15.    head -n2


Титла: Re: проблем със set -A array
Публикувано от: romeo_ninov в Jun 14, 2010, 15:06
#/bin/bash
aa=20
ab=26
ac=32
ad=6
set -A <array1> aa ab ac ad
echo "array1 is: $array1"

искам тези стойности да влезат в масив array1 и след това той да се визуализира. Другото нещо което искам е да се изведат двете най големи стойности, което не знам от къде да почна. Четох, четох.... не успява. Моля за помощ или дайте линк къде да прочета...
Това работи на корн шел, само че формата е:
set -A array1 aa ab ac ad
и ако искаш числата, а не променливите, става
set -A array1 $aa $ab $ac $ad


Титла: Re: проблем със set -A array
Публикувано от: loshiat в Jun 14, 2010, 15:15
При bash синтаксисът е друг:

Код
GeSHi (Bash):
  1. aa=20 ab=26 ac=32 ad=6
  2.  
  3. 1. arr=(
  4.  "$aa" "$ab" "$ac" "$ad"
  5.  )
  6.  
  7. . printf 'all elements of $arr:\n'
  8.  
  9. 2 .printf '%s\n' "${arr[@]}"
  10.  
  11. printf 'top 2:\n'
  12.  
  13. 3. printf '%s\n' "${arr[@]}" |
  14.  sort -nr |
  15.    head -n2



Искрено съм ти благодарен. Прочетох за printf, sort i head с тези опции които си написал. Предполага че | е за да се изпълни printf със следващите условия  сортиране в нисходящ ред и визуализация само на първите 2 реда. Много лагодаря. Ще пробвам и с други аргументи на printf, sort head.

п.п. Без помощта ти трудно щях да се оправя


Титла: Re: проблем със set -A array
Публикувано от: romeo_ninov в Jun 14, 2010, 16:09
Искрено съм ти благодарен. Прочетох за printf, sort i head с тези опции които си написал. Предполага че | е за да се изпълни printf със следващите условия  сортиране в нисходящ ред и визуализация само на първите 2 реда. Много лагодаря. Ще пробвам и с други аргументи на printf, sort head.

п.п. Без помощта ти трудно щях да се оправя
не, символа | означава че изхода на лявата команда ще се подаде като вход на дясната т.е. това, което направи print ще бъде като входни данни за sort, а резултата от sort ще е входни данни за head
Прочети малко за STDIN, STDOUT, STDERR