Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Cendas 02 Ledna 2012, 13:04:42
-
Ahoj potřeboval když mám proměnou ke je název dne tak ji upravit aby měl vždy stejný počet znaků tedy aby se chybějící doplnili mezerami. Tedy aby úterý mělo stejný počet znaků jako pondělí.
#!/bin/bash
DAY_0=`date -d "2012-01-03" +%A`
echo $DAY_0
exit
-
To nejjednoduší, co mě napadá:
DAY_0="`date -d "2012-01-03" +%A` "
echo ${DAY_0:0:7}
-
Znaků nebo bytů?
-
Znaků nebo bytů?
dobre, predpokladejme ze mam problemy se ctenim a jsou to bytes .., co s tim tedy udelas ?
-
zrovna jsem, než napsal GdH odpověď, dumal jak sakra přinutit printf aby to bral po znaku a ne po bytu... takže
printf "%-9s" $DAY_0
-
zrovna jsem, než napsal GdH odpověď, dumal jak sakra přinutit printf aby to bral po znaku a ne po bytu... takže
printf "%-9s" $DAY_0
Díky použil jsem tohle a funguje to. :)
-
funguje to. :)
Jak to? printf doplňuje zrovna na počet bytů, ne znaků:$ for i in pondělí úterý středa čtvrtek pátek sobota neděle čřžěšč; do printf "%-12sahoj\n" "$i"; done
pondělí ahoj
úterý ahoj
středa ahoj
čtvrtek ahoj
pátek ahoj
sobota ahoj
neděle ahoj
čřžěščahoj
druhý sloupec není zarovnaný, protože počet znaků je různý, narozdíl od bash substituce (GdH):$ for i in pondělí úterý středa čtvrtek pátek sobota neděle čřžěšč; do i+=" "; echo "${i:0:12}ahoj"; done
pondělí ahoj
úterý ahoj
středa ahoj
čtvrtek ahoj
pátek ahoj
sobota ahoj
neděle ahoj
čřžěšč ahoj
-
Když mě právě tohle píše chybu: echo ${DAY_0:0:7}
Dám to sem celé jak to mám.
Tady je ten script.
#!/bin/bash
FORECAST_FILE=forecast.txt
for pn in $(seq 0 4); do
eval `sed -n 's/.*<time from="\([^T]*\).*/DATE=\1/;'$pn'1p' $FORECAST_FILE`
eval 'DAY_'$pn'='`date -d $DATE +%A`
done
echo $DAY_0'I'
echo $DAY_1'I'
echo $DAY_2'I'
echo $DAY_3'I'
echo $DAY_4'I'
exit
V příloze je soubor ze kterého načítám vstupní data.
Ještě jsem přemýšlel nad tím jak místo proměnné $DATE tam vložit ten příkaz sed ale nepodařilo se mi na to přijít.
Jde to sice takhle ale pak už mi před to nejde dát ten eval.
date -d`sed -n 's/.*<time from="\([^T]*\).*/DATE=\1/;'$pn'1p' $FORECAST_FILE` +%A
[příloha smazaná administrátorem]
-
#!/bin/bash
for pn in $(seq 0 4); do
DAY="`sed -n 's/.*<time from="\([^T]*\).*/\1/;'$pn'1p' forecast.txt |xargs -I i date -d i +%A` "
echo "${DAY:0:8}I"
done
exit
Trochu jsem to zjednodušil.
-
Mě to takhle píše chybu:
Tohle mi nechce fungovat: echo "${DAY:0:8}I"
pokus.sh: 10: Bad substitution
-
Mě to takhle píše chybu:
Tohle mi nechce fungovat: echo "${DAY:0:8}I"
pokus.sh: 10: Bad substitution
Nefunguje to v DASHi (/bin/sh), ale pokud máš skript uvozen #!/bin/bash, tak by neměl být problém. Nesmíš ho ale spouštět tímto:
sh pokus.sh
ale jednou z následujících možností:
./pokus.sh
bash pokus.sh
-
Ahoj dík to jsem nevěděl tak jsem to zkusil udělat takhle ale přidá to znaky ale mezera nejde.
for pn in $(seq 0 4); do
eval `sed -n 's/.*<time from="\([^T]*\).*/DATE=\1/;'$pn'1p' $FORECAST_FILE`
eval 'DAY_'$pn'='`date -d $DATE +%A',,,'`
done
echo ${DAY_0:0:7}'I'
echo ${DAY_1:0:7}'I'
echo ${DAY_2:0:7}'I'
echo ${DAY_3:0:7}'I'
echo ${DAY_4:0:7}'I'
exit
-
Funkční skript jsem ti napsal, zamysli se nad uvozovkama.
-
Dík máš pravdu stačilo to dát do uvozovek.
Mezery mě to bere taky. Stačilo tam dát zpětné lomítko. :)
eval 'DAY_'$pn'='`date -d $DATE +%A'\ \ \ '`
-
A vykašli se na ten eval, to jsem ti radil jako fintu v daném případě, ne jako standardní cestu pro práci s proměnnými. Když ti nestačí to rovnou vypisovat a musíš to strkat do proměnných, raději použij pole:
#!/bin/bash
for pn in $(seq 0 4); do
DAY[$pn]="`date -d $(sed -n 's/.*<time from="\([^T]*\).*/\1/;'$pn'1p' forecast.txt) +%A` "
done
echo "${DAY[0]:0:7}I"
echo "${DAY[1]:0:7}I"
echo "${DAY[2]:0:7}I"
echo "${DAY[3]:0:7}I"
echo "${DAY[4]:0:7}I"
exit
Minule jsem použil zbytečně xargs, tohle je rychlejší ;)
-
Zkusil jsem to udělat jak píšeš ale pak mě to dělá chyby proměnných v conky pro stupně, to bych pak taky musel předělat.
Do přílohy jsem dal celí ten script, kdyby se ti chtělo se na to kouknout, ale není to nutné funguje to i takhle dobře.
[příloha smazaná administrátorem]