Autor | Zpráva | ||
---|---|---|---|
Honza Marek Profil * |
#1 · Zasláno: 10. 2. 2016, 03:48:13
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 |
#2 · Zasláno: 10. 2. 2016, 09:04:41
pole=( $( for val in "${pole[@]}" do echo "$val" done | sort -V) ) |
||
Honza Marek Profil * |
#3 · Zasláno: 10. 2. 2016, 11:58:42
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") pole=("54.c cc" "11.vvv" "0.vvv" "4.ddd") |
||
Kajman Profil |
#4 · Zasláno: 10. 2. 2016, 12:23:43
Mohlo by pomoci předtím přenastavit systémovou proměnnou pro oddělovač...
IFS=$'\n' |
||
Honza Marek Profil * |
#5 · Zasláno: 10. 2. 2016, 13:00:08
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 |
#6 · Zasláno: 10. 2. 2016, 13:29:10
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 * |
#7 · Zasláno: 11. 2. 2016, 01:24:15
Kajman:
Moc děkuji. |
||
Časová prodleva: 7 let
|
0