Autor Zpráva
Honza Marek
Profil *
Zdravím,
najde se tady nějaký guru na bash ? Mám takové pole

pole=("54.ccc" "11.vvv" "0.vvv" "4.ddd")

a potřebuji ho setřídit takto (podle čísel před tečkou, co je za tečkou nebrát žádný zřetel)

pole=("0.vvv" "4.ddd" "11.vvv" "54.ccc")

Poradí někdo ? Předem děkuji

PS: nevím do které rubriky to patří tak prosím admina o případnou opravu
Kajman
Profil
pole=( $(
    for val in "${pole[@]}"
    do
        echo "$val"
    done | sort -V) )
Honza Marek
Profil *
Kajman:
Ahoj, moc děkuji, funguje to dobře, otázka je jak moc je to rychlé. Nicméně jsem narazil ihned na problém, pokud bude pole
místo
pole=("54.ccc" "11.vvv" "0.vvv" "4.ddd")
tohle
pole=("54.c cc" "11.vvv" "0.vvv" "4.ddd")
už to nefunguje
Kajman
Profil
Mohlo by pomoci předtím přenastavit systémovou proměnnou pro oddělovač...
IFS=$'\n'
Honza Marek
Profil *
Kajman:
Pomohlo to. Chlape jsi vážně bedna a je potřeba tu IFS nějak zálohovat s následným obnovením, když se jedná o systémovou proměnnou ?
BTW: Je vidět, že s Bashem pracuješ, můžeš mi ještě poradit, jak se zbavit toho čísla před tečkou (včetně té tečky) při tom sortingu ? Já to zkoušel klasicky ${val#*.} což se splní ale zase se to nesortne, jako kdyby se to pole prvně celé fyzicky načetlo, až následně se provedl ten sort. Pokud jsem odstranil ten prefix tak se to neprovede. Musel bych znova volat ten cyklus, což je jak sám dobře víš obrovská časová ztráta. Velké díky
Kajman
Profil
Po sortu je možné udělat např. sed...

OLDIFS=$IFS IFS=$'\n'
pole=( $(for val in "${pole[@]}";do echo "$val"; done | sort -V | sed 's/^[0-9]*\.//') )
IFS=$OLDIFS
Honza Marek
Profil *
Kajman:
Moc děkuji.

Vaše odpověď

Mohlo by se hodit

Zvažte, zda se neobrátit na specializované fórum, toto se zabývá především webovou problematikou.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0