Sziasztok!
A következő a problémám. Van egy text fájlom, amit fel kéne vinnem egy MySQL adatbázisba. A mezőket space választja el egymástól. A gond azonban az, hogy az utolsó mezőben (a mellékelt példában az IP cím után) vannak további space karakterek.
Hogyan lehetne megoldani, hogy azok egy mezőbe kerüljenek be?
Egy ilyen fájl itt található.
Előre is köszi a segítséget.
- 6038 megtekintés
Hozzászólások
sed-del próbáltam, de eddig csak addig jutottam el, hogy minden space-t átalakított...
- A hozzászóláshoz be kell jelentkezni
Ha tudod azt, hogy hány mező van, akkor tudsz rá regex-et írni:
's/^( ... ) (...) (...)$/"\1"..../'
--
hup.user.js
- A hozzászóláshoz be kell jelentkezni
Bocs a láma kérdésért, de pontosan hogyan? Sajna még elég kezdő vagyok regex terén.
6 mezőm van. A fájlt linkeltem a nyitó hozzászólásban.
- A hozzászóláshoz be kell jelentkezni
sed -r 's/^([^[ ]+) ([^[ ]+) ([^[ ]+) "([^"]+)" "([^"]+)" ([^[ ]+) ([^[ ]+) (.*)$/whatever/'
olvasgatni való: http://progkor.inf.elte.hu/200607.2/eloadas.htm
--
hup.user.js
- A hozzászóláshoz be kell jelentkezni
nem bash, de...
awk 'BEGIN {ORS=" "} {for (i=6; i<=NF; i++) {print $i} print "\n"}' fájlnév
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
az elozoknel a sed az bash volt? :)
- A hozzászóláshoz be kell jelentkezni
Bocs, azt hiszem, rosszul fogalmaztam meg, mit szeretnék.
Vagy egy ilyen sorom:
PsB:7517 V00C1A175] 9ddf0f39d8aab83684281716f1ea1f08 "(FL)_dirQS" "72.82.235.233" CVAR #9001 (AGP_Interface.AAGUIController AutoLoad User.ini = (MENUCLASSNAME=)
És ilyenné szeretném alakítani:
PsB:7517;V00C1A175];9ddf0f39d8aab83684281716f1ea1f08;"(FL)_dirQS";"72.82.235.233";CVAR #9001 (AGP_Interface.AAGUIController AutoLoad User.ini = (MENUCLASSNAME=)
- A hozzászóláshoz be kell jelentkezni
awk '{sub(" ",";");sub(" ",";");sub(" ",";");sub(" ",";");sub(" ",";");print $0}' fájlnév
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
perl -ne 'print join(";", split(/\s/, $_, 6)), "\n";' < fájl
- A hozzászóláshoz be kell jelentkezni
-a mint autosplit. -F-el meghatározható az elválasztó karakter(ek) is.
perl -ane 'print join(";", @F[0..5]),"\n"' fájl
- A hozzászóláshoz be kell jelentkezni
Nem mondod, hogy a -a az autoslit! :)) Nem tudtam. :) Ez nem azt csinálja, ami a feladat volt. Csak az első öt szóköznél kell vágni a sort, utána egyben kell hagyni az egész végét.
- A hozzászóláshoz be kell jelentkezni
És az benne volt a feladatban, hogy tegyen minden sor után egy üres sort? :)
- A hozzászóláshoz be kell jelentkezni
Jólvan, ki kellett volna próbálni. Az vesse rám az első követ, aki nem tesz ki egy-egy felesleges üres sort néha :)
- A hozzászóláshoz be kell jelentkezni
| grep -v ^$
- A hozzászóláshoz be kell jelentkezni
de ha szigorúan hűek akarunk maradni a téma címéhez, akkor a bash script pl.:
#!/usr/bin/bash
while read -a tomb
do
for ((i=0;i<=`printf ${#tomb[*]}`;i++))
do
if (( i<6 ))
then
printf ${tomb[i]},
else
printf ${tomb[i]}" "
fi
done
printf \\n
done
az awk-s verzióm is mehet ciklussal:
awk '{for (i=1; i<=6; i++) {sub(" ",";")} {print $0}}' fajlnev
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
- A hozzászóláshoz be kell jelentkezni
Helios megoldásával tökletesen működik. Panther, a doksit áttanulmányozom.
Köszönöm nektek!
- A hozzászóláshoz be kell jelentkezni
Tiszteletem Mindenkinek!
Nem akartam új topicot nyitni,ezért ide írnék:
Azt hogyan lehet megoldani ,hogy egy általam kiválasztott felhasználó összes rendszerben eltöltött idejét kilistázzam?A last segítségével.Egyenként kilistázza,de összekéne adni.Összes idő kellene.
Lehetne időt is adni,hogy mettől meddig nézze.Ezt hogy lehet megcsinálni?
Ebben kérnék segítséget.
Előre is köszönöm!
- A hozzászóláshoz be kell jelentkezni
Erre a célra AWK-ban vagy Perlben írnék egy egysoros szkriptet. Ha egyiket se használtad még, akkor javaslom az AWK-t (azon belül a GAWK-t), mert azt gyorsabban meg lehet tanulni, akár a man page alapján is. 1 óra alatt az AWK megtanulható, és még kb. 20 perc megírni a kívánt szkriptet, várható szkriptméret 300 bájt alatt.
- A hozzászóláshoz be kell jelentkezni
Ha awk-ban írom,akkor lst benen lesz?Még most kezdtük,de jó nehezet adnak...
Tudnál segíteni bővebben,hogy mégis hogy kellene?
vagy az Orlando unix iskolán kívül valami doksi?
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
ennyi perc:
last -R user | grep -v 'still logged in' |
perl -e '$sum=0; while (<>) { s/^.*\((..):(..)\)/$sum+=$1*60+$2/e; } print "$sum\n";'
- A hozzászóláshoz be kell jelentkezni
beírom,lefuttatom,de eredményül 0-t ír.
Hol lehet a hiba?
Panther:köszönöm a linket
perl -e miylen parancs?iylne ne mtaláltam sehol
- A hozzászóláshoz be kell jelentkezni
a last-nak létező usernevet adtál meg?
- A hozzászóláshoz be kell jelentkezni
man perl
Amúgy a perl a perl értelmező, a -e arra utasítja, hogy ne a stdin-t hajtsa végre, hanem azt a sort a paraméterben, a többi perlül van.
- A hozzászóláshoz be kell jelentkezni
(off)Hmmm... sikerült egy éles szerveren elengedni, format c: rulez. :-D (/off)
Lefuttattam, nekem megy a user nevét írhattad el:
hron@neuronhill:~$ last -R hron | grep -v 'still logged in' | perl -e '$sum=0; while (<>) { s/^.*\((..):(..)\)/$sum+=$1*60+$2/e; } print "$sum\n";'
10102
hron@neuronhill:~$
- A hozzászóláshoz be kell jelentkezni
Nekem is megy, bisztos tegnap valamit elnéztem,már fárad tvoltam :D
Perl nélkül szeretném megoldani,mivel perl nem értek és tudni is szeretném mi mit csinál.Sajnos még most ismerkedek a linux/unix-al ,s ne msok tapasztalatom van még.
Awk -val gondoltam.Biztos hogy bonyolultabb,de minden tapasztalat jól jön,csak hát így kcisit nehéz.
úgy kellene,hogy eyg script legyen,és ha elindítom akkor kéri be az user nevét,akit lekérdezzünk.
Read parancs segítségével olvastatok be,igaz?
(bújom az orlandó unix iskolát + script doksik) :D
Köszi!
- A hozzászóláshoz be kell jelentkezni
Egy: arra van az előnézet gomb, hogy átfusd a szöveget. És gépelj lassaban.
Kettő: Ha nem akarod magad szétszivatni egy bonyibb problémával, ismerkedj meg a perl-lel, nem az ördögtől való, hidd el. Ajánlom Laura Lemay Perl mesteri szinten 21 nap alatt c. könyvet.
- A hozzászóláshoz be kell jelentkezni
Az ér, ha azt mondom, hogy apt-get install sac && man sac ? :-D
- A hozzászóláshoz be kell jelentkezni
Azok kedvéért, akik nem tudják: mi is ez?
- A hozzászóláshoz be kell jelentkezni
Próbálkozás a megoldásra awk-val:
#!/bin/bash
last |awk -F"(" '/gabo/ {print $2}'|awk -F")" '{print $1}'|awk -F: 'BEGIN
{ora=0; perc=0} {ora = ora + $1; perc = perc + $2} END {print "ora:"ora" perc:"perc }'
Futtatásnál ezt írja:
awk: line 1: syntax error at or near end of line
Már annyira nézem,hogy kigúvas a szemem,de ne mlátok hibát.
Hol lehet a hiba szerintetek?
- A hozzászóláshoz be kell jelentkezni
segíthet ha beleírsz egy 'set -x' -et, így:
#!/bin/bash
set -x
last | awk ...
- A hozzászóláshoz be kell jelentkezni
set -x? Ezt miért gondoltad?nem értem...
Rosszabb lett:
+ . idok.sh
++ set -x
++ last
++ awk '-F(' '/fejer/ {print $2}'
++ awk '-F)' '{print $1}'
++ awk -F: 'BEGIN
{ora=0; perc=0} {ora = ora + $1; perc = perc + $2} END {print "ora:"ora" perc:"perc }'
awk: line 1: syntax error at or near end of line
- A hozzászóláshoz be kell jelentkezni
de kiderult, hogy melyik awk dobta az errort; az awk -F: 'BEGIN után ne legyen újsor
- A hozzászóláshoz be kell jelentkezni
Szia!
Ezt már nem hiszem el... :(
Javítottam,ahogy tanácsoltad,de ugyanazokat a hibákat dobja ki,viszont kiírja a megolást is.
Tehát a hibák megvannak,de a megoldást is írja.
Hogy kéen eltüntetni a hibákat?
Set -x mit jelent pontosan?Kerestem,de ne mtalálom sehol,manban nincs benne.
- A hozzászóláshoz be kell jelentkezni
azok nem hibák, hanem verbose mód, kiszeded a 'set -x' -et, és jó lesz..
- A hozzászóláshoz be kell jelentkezni
Köszönöm,de közbe már rá jöttem.
Akkor a set -x iylen hibakereső?
Verbose mód nak mi a lényege?
- A hozzászóláshoz be kell jelentkezni
Gondolkozz egy picit. Használj online szótárt.
Ne lőjétek le, gondolkodjon egy picit. Holnap leírom a megoldást, ha nem jön rá, becsszó.
- A hozzászóláshoz be kell jelentkezni
Nem is gondolam,hogy ilyen szó van azt angol szótárban.Nos,asszem már tom mire való.
Bőbeszédű,azaz kiírja a használt parancsokat + kapcsolót.Többlet tájékozatás.
- A hozzászóláshoz be kell jelentkezni
Igen keves játékos, ön megnyerte a nap fődíját. Gratulálunk.
- A hozzászóláshoz be kell jelentkezni
:D
- A hozzászóláshoz be kell jelentkezni
(echo 'x=0' last panther | cut -f2 -d '(' | cut -f1 -d ')' | sed -r 's/^([0-9]+)\+/\1*24*60+/;s/([0-9]{2}):([0-9]{2})$/\1*60+\2/;s/.*/x+=&/' | head -n-2 | tail -n+2 ; echo 'x' ) | bc | awk '{ printf "%d óra, %d perc\n", $0/60, $0%60}'$0%60}'
- A hozzászóláshoz be kell jelentkezni
Ha már egyszer indítasz egy awk-t (nyilván ez lesz a legnagyobb overhead), akkor a többit teljesen felesleges. Gyorsabban fut, ha nem sok parancsból van összepájpolva. Viccesnek tartom az ilyeneket:
cat fájl | grep 'alma' | awk '{print $2}'
Értelmesebb volna így:
awk '/alma/ {print $2}' fájl
Tudom, kényelmetlenebb awk-ban programozni, mint összepájpolni egy ilyen izét, de ha a végrehajtási idő számít, akkor praktikusabb. Én szeretem a hatékony megoldásokat :)
- A hozzászóláshoz be kell jelentkezni
hatékonyság XOR awk. Régen sokat awk-ztam, mert lényegében egy programozási nyelv, a többi eszközzel meg túl bonyolult volt. Ma meg azokkal kényelmesebb. Nem szeretem az awk-t :)
A példa meg a shell eszközeiről szól, mindegyik egy-egy részfeladatot old meg :D De ha zavar, lecserélem neked az awk-t printf-re :)
- A hozzászóláshoz be kell jelentkezni
Nem kell, ne tedd. Bár elég érdekes kérdés, hogy meddig shell és honnan más. Vajon az ed és a sed még shell, de az awk és a perl már nem? Végül is mindegy. A lényeg, hogy ha lehet, akkor érdemes csökkenteni a pájpolt parancsok számát, ezzel gyorsul a futás, mivel itt általában a programok indítása és leállása több idő, mint maga a munka. (Biztos vagyok benne, hogy ez neked nem újdonság, csak az archívum miatt)
- A hozzászóláshoz be kell jelentkezni
Sok megoldás van, itt van egy:
használat: script_neve feldolgozando_fajl hany_oszlopot_gyartunk
A scriptben 2 változót be lehet állítani: mit cserélni (what_to_replace) mire (to_what_to_replace).
#!/bin/bash
#settings start
what_to_replace=" "
to_what_to_replace=";"
# settings end
input_file=$1
loop_count=$2
read_content=`cat "$1"`
for((i=0;$i<$loop_count;i=$(($i+1))));
do
read_content=`echo $read_content | sed s/"$what_to_replace"/"$to_what_to_replace"/1`
done
echo $read_content"$to_what_to_replace"
- A hozzászóláshoz be kell jelentkezni
Kínszenvedések árán átírtam/tuk a felhsznált idos progit,bekéri az user nevét.
#!/bin/bash
echo "A program kiírja,hogy az adott felhasználó mennyi időt töltött a
rendszerben összesen."
echo " Add meg a felhasználó nevét"
read x
last|awk -F"(" ' /'$x'/ {print $2}'|awk -F")" '{print $1}'|awk -F: 'BEGIN{perc=0} {perc = $1*60 $2} END {print " '$x' felhasználói ideje:" perc}'
Hogy lehet azt megadni,hogy egy idQ intervallumban , pl: mondjuk 2007.01.02-2007.03.29 intervallumban írja ki a felhasználo összes rendszerben töltött idejét?
?
- A hozzászóláshoz be kell jelentkezni
mondjuk 2007.01.02-2007.03.29 intervallumban írja ki a felhasználo összes rendszerben töltött idejét
hát ahogy elnézem a `last' nem jó erre... :(
- A hozzászóláshoz be kell jelentkezni
Azt mivel lehetne megcsinálni?
Awk-ban nem lehet megadni?Ezt kéne megcsinálni ,de idáig is kínlódással jutottam el,de erről az időintervallum megadásról gőzöm nincs.
Valakinek 5let?
- A hozzászóláshoz be kell jelentkezni
Nézd, a probléma ott van, hogy a 'last' igen limitált képességekkel rendelkezik; például ahol most nézem, ott nem lehet neki megadni, hogy pl. az bejelentkezés idejét feldolgozható formátumban közölje.
Három út marad:
1) a C-ben hekkelős,
2) a Perl/Python/whatewer-bindinges szebb megoldás, de mondjuk ezeket külön kell megszerezni rossz esetben, ld. python-utmp;
3) vagy az, hogy a last kimenetéhez hozzágányolsz egy awk kódot, tele olyan feltételekkel, amit már akkor nem fogsz átlátni, amikor írod.
én a 2-eset csinálnám
- A hozzászóláshoz be kell jelentkezni
Felejtsd el a bash-t, tanulj meg perl-ül.
- A hozzászóláshoz be kell jelentkezni
Értem.És a grep szűrővel?
Tuti,hogy egyszerűbb perl/pythonban,csak ezt nem tanuljuk,és azért kínlódnék ezekkel .
Esetleg nem tudnád leírni,hogy perlben hogy kellene megadni ezt za időintervallum közti keresést?
- A hozzászóláshoz be kell jelentkezni
Az a durva, hogy eddig senki sem említette az ac(1)-et...
próbáld ki ezt:
$ echo -n "User: "
$ read user
$ ac -ayzd "$user"
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
echo -n "User: " && read user
echo -n "From (YYYY-MM-DD): " && read from
echo -n "Until (YYYY-MM-DD): " && read until
from=$(date -d "$from" +%s)
until=$(date -d "$until +1 day 0:0:0" +%s)
ac -dayz "$user" | sed 1d |
(
sum=0
while read line
do
D=$(date +%s -d "$(echo "$line" | cut -f1)")
if [ "$D" -ge "$from" ] && [ "$D" -le "$until" ]
then
U=$(echo "$line" | cut -f2- | sed 's/^\s*total\s*//')
sum=$(echo "$sum+$U" | bc)
fi
done
secs=$(echo "$sum*3600/1" | bc )
echo $((secs/3600)):$((secs%3600/60)):$((secs%60))
)
- A hozzászóláshoz be kell jelentkezni
Szia!
ezzel csak egy gond van.Sajnos a linux nem is meri az ac parancsot.
- A hozzászóláshoz be kell jelentkezni
milyen disztró alatt nincs ac?
- A hozzászóláshoz be kell jelentkezni
Pl Gentoo. ha van is, ismeretlen előttem meik csomag adja.
- A hozzászóláshoz be kell jelentkezni
a csomag neve 'acct'
- A hozzászóláshoz be kell jelentkezni
You win!
- A hozzászóláshoz be kell jelentkezni
debian-on próbáltam
- A hozzászóláshoz be kell jelentkezni
Probléma megoldva,köszönöm a segítséget mindenkinek!
- A hozzászóláshoz be kell jelentkezni
Üdv!
Bash-ban szeretnén összehasonlítani két változó értékét, így:
if [ $a -gt $b ]
then
echo a nagyobb
fi
Az lenne a problémám, hogy a változókban tizedestörtek vannak és ezt sem ponttal, sem vesszővel elválasztva nem fogadja el, mondván
integer expression expected
. Meg lehet ezt valahogy csinálni?
Petya
- A hozzászóláshoz be kell jelentkezni
ennek az eredménye 1 (igaz) vagy 0 (hamis)
$ echo $a \> $b | bc
- A hozzászóláshoz be kell jelentkezni
~ $ [[ 1,3 -gt 1,0 ]] && echo yes || echo no
yes
dupla szögletest használj!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Segítséget szeretnék kérni egy feladat megoldásához. Eddig próbálkoztam megoldani, de sajnos nem sikerült, így most végső elkeseredettségemben hozzátok fordulok. A feladat a következő:
"irjunk egy expr2.sh parancsot amely az az expr parancs kepessegeit egesziti ki
sqrt, egy hatvanyozasi kepesseggel"
Holnap reggel kell leadni. Előre is ködöznöm a segítséget!
- A hozzászóláshoz be kell jelentkezni
"Eddig próbálkoztam megoldani, de sajnos nem sikerült, ..."
Rendben. Akkor az lenne a legcélszerűbb, ha idemásolnád a te egyelőre nem működő változatodat, és azt alakítanánk. Illetve azt is, hogy milyen formában tervezed a kifejezésben megadni a hatványozás műveletét.
"irjunk egy expr2.sh parancsot amely az az expr parancs kepessegeit egesziti ki sqrt, egy hatvanyozasi kepesseggel"
Az sqrt több nyelvben is a négyzetgyökvonás műveletét jelenti, a bash önmagában ilyet nem tud. A ** operátor segítségével hatványozni is csak egész típusú operandusok között lehet, és a kitevő sem lehet negatív.
- A hozzászóláshoz be kell jelentkezni
A ** operátor segítségével hatványozni is csak egész típusú operandusok között lehet
E! tud ilyet is? ;) tok jo, ma sem lettem butabb... (sokat hasznalok shell-aritmetikat, neha talan kellett is volna egesz-hatvanyozas, de vhogy ez elkerult eddig)
- A hozzászóláshoz be kell jelentkezni
stra: Őszintén megmondom, hogy nem nagyon értek (még) ehez, ezért nem hiszem, hogy a próbálkozásaim építőjellegűek lennének. Ha meg tudná valaki írni az egészet annak megköszönném. Sokat nem tudok adni, max egy nagyon ízletes Bocsi csokit :) Köszönöm!
(u.i.: Sikerült még szerezni pár nap haladékot)
- A hozzászóláshoz be kell jelentkezni
Segítünk megírni. Hangsúly a segítésen. Neked is hozzá kellene tenni valamit, nem helyetted írjuk meg, az hosszú távon neked sem jó.
Elsőként azt kellene meghatározni, hogy mit is szeretnél, mert a kiírás a fenti formában nem egyértelmű. Gyökvonást (sqrt) vagy hatványozást? Elég-e az egész számokkal foglalkozni, vagy tört is lehet? Használható-e a hrgy84 által ajánlott bc vagy csak tisztán a bash? Egyáltalán mik a megengedett és tanult eszközök (grep, sed, awk, bc, perl, regexp)?
Szóval ezeket a kérdéseket válaszold meg légy szíves, ezek nélkül nem tudhatjuk, hogy merre indulhatunk, és nyugodtan másold ide az eddigi próbálkozás eredményét, akkor is, ha nem működik, szintaktikailag hibás.
- A hozzászóláshoz be kell jelentkezni
man bc
Amugy: link
Illik am a google-t hasznalni, mielott kerdezunk, hatha mi csinalunk rosszul vmit.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Nem feladat, csak kíváncsi vagyok. Hogyan lehet kötőjellel kezdődő fájlneveket kezelni? Egy album volt ilyen formátumban. Kénytelen voltam mc
-vel átnevezni, miután az mplayer
nem játszotta le őket és az mv
parancs sem működött.
- A hozzászóláshoz be kell jelentkezni
rm -- -file
man rm:
"To remove a file whose name starts with a ‘-’, for example ‘-foo’, use one of these commands:
rm -- -foo
rm ./-foo
"
- A hozzászóláshoz be kell jelentkezni
Köszi, ezt nem tudtam. És bár a manual nem írja, de működik mv
-nél is. Mentségemre szolgáljon, hogy ha törölni akartam volna a fájlt, akkor biztos megtalálom :)
- A hozzászóláshoz be kell jelentkezni
A getopt(3) rejtelmei: ha nem egyértelmű, akkor a -- által lehet megmondani, hogy az előtte álló dolgok opciók, utána lévők sima mezei paraméterek (jobbára ugye fájl- vagy könyvtárnevek).
- A hozzászóláshoz be kell jelentkezni
A ./-foo viszont mindenképp működik.
- A hozzászóláshoz be kell jelentkezni
stra: Őszintén megmondom, hogy nem nagyon értek (még) ehez, ezért nem hiszem, hogy a próbálkozásaim építőjellegűek lennének. Ha meg tudná valaki írni az egészet annak megköszönném. Sokat nem tudok adni, max egy nagyon ízletes Bocsi csokit :) Köszönöm!
(u.i.: Sikerült még szerezni pár nap haladékot)
- A hozzászóláshoz be kell jelentkezni
Valaki? :(
- A hozzászóláshoz be kell jelentkezni
Amíg nem kapunk érdemi válaszokat a fent feltett kérdésekre, addig nem nagyon lesz ötlet a már elhangzottakon kívül. A feladatkiírást pedig kizárólag te ismered. Azt sem tudjuk biztosan és pontosan, hogy mit és mivel kell csinálni.
Legalább azt írd le, hogy hogyan tervezed megoldani, a konkrét parancsokra pedig adunk javaslatokat. Legalább egy nagyon kis önálló kezdeményt, tervet, légy szíves...
"nem hiszem, hogy a próbálkozásaim építőjellegűek lennének."
Nem annyira az építő jellegen vagy a működőképességen, hanem az önálló próbálkozáson van a hangsúly.
- A hozzászóláshoz be kell jelentkezni
A feladat leírás:
"irjunk egy expr2.sh parancsot amely az az expr parancs kepessegeit egesziti ki
sqrt, egy hatvanyozasi kepesseggel"
Ennyit tudok én is:(
- A hozzászóláshoz be kell jelentkezni
"Ennyit tudok én is:("
De az elmúlt egy hét alatt a feltett kérdések nyomán csak kiderült (utánajártál) az, hogy négyzetgyököt kell vonni (sqrt) vagy hatványozni kell, illetve milyen alap és kitevő jöhet szóba, milyen külső programok használhatóak - ha használhatóak egyáltalán a bash-en kívül, milyen szintaktikával kell megadni a (még mindig kérdéses) műveletet.
Ezek a kérdések azért vannak, mert alapjaiban határozzák meg a használható eszközöket, illetve ugyanez fordítva is érvényes. Ha ezekre nem tudsz határozottan válaszolni, akkor a feladat pontosításra szorul, és ezt csak te tudod megtenni. Egy nem egyértelmű kiírásból mi nem tudjuk kitalálni, hogy tőled mit kérnek. Egy iskolai feladat esetén általában nem engednek a tanultakon kívül mást használni. Ha mégis, illetve gyökvonásról van szó, akkor pedig ott a hrgy84 által említett bc.
Megjegyzés: a feladat szövegezése így másodszorra leírva is erősen magyartalan és értelmetlen, ahogy az eredeti is az (14.): "egesziti ki ... egy hatvanyozasi kepesseggel", "az az expr parancs kepessegeit egesziti ki sqrt, egy hatvanyozasi kepesseggel". Hopp, itt van a wgetes és a gráfos feladat is. :)
- A hozzászóláshoz be kell jelentkezni
Pontosan nem tudtam megérdeklődni, mert külföldön van az illetékes, de gondolom hatványozni kellene. Kb a legegyszerűbb megoldás kellene, még kb csak "alapnak" számító kis pici programokat írtunk (listázzuk ki könyvtár tartalmát képernyőre pl), még nem írtunk olyan scriptet ami külső programot használna.
- A hozzászóláshoz be kell jelentkezni
"még nem írtunk olyan scriptet ami külső programot használna."
Ez akkor elég korlátozott képességű lesz, de legyen így. Ha ebben a formában megfelel, akkor ez lesz a script működése:
ha a script elsőtől kezdődő pozícionális paraméterei tartalmaznak "**"-ot
akkor
kiíratjuk a shellel kiértékeltve
különben
meghívjuk vele az expr parancsot a hibaüzenetet elnyomva, a kimenetet változóba téve
ha a visszatérési értéke nagyobb vagy egyenlő kettővel
akkor
hibaüzenet kiírása
különben
kiírjuk a változó értékét
elágazás vége
elágazás vége
Neked már csak a bash parancsait, operátorait kell behelyettesítened.
Ha nem találod a megfelelőt, segít a man bash, itt keresd:
a script elsőtől kezdődő pozícionális paraméterei külön vagy egyben kezelve: Special Parameters
shellel kiértékeltetés: Special Parameters
logikai kifejezés vizsgálata: Compound Commands
parancs kimenete változóba: Command Substitution
Azt hiszem, így már nem lesz túl nehéz, negyed óra alatt át lehet írni.
- A hozzászóláshoz be kell jelentkezni
Próbálgattam csinálni a feladatot...eddig jutottam:
#!/bin/sh
if [ $# -ne 3 ]
then
echo "Hiba"
else
echo $@ > tmp.file
#echo $0 > tmp.file
awk '{
print $1;
print $2;
print $3;
#if($2=="sqrt") { print sqrt($1,$3);}
# if($2=="pow") { print pow($1,$3);}
#if($2!="sqrt"&&$2!="pow"){ print `expr $1 $2 $3`;}
}' tmp.file
# rm tmp.file;
fi
Futtatás:./expr2.sh1pow2
Már cska akirás hiányzik belőle; if-ekkel gondolnám megcsinálni,csak nem igazán tudom,hogy hogy.
Hogyan módosítanátok ezt, hogy kiírja az eredményt? Hogy kell azt megcsinálni?
Előre is köszi a help-et.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint használható az awk?
Az awk a ^ operátort használja a hatványozásra. A négyzetgyökvonásnak csak egy argumentuma lehet. A külső program meghívását a system segítségével lehet végrehajtani, a backtick nem működik.
- A hozzászóláshoz be kell jelentkezni