Sziasztok. Egy olyan kérdés lenne, hogy hogy lehetne megcsinálni ezt, hogy egy ilyen sorból (egy szövegfájl) "Kc6 D4 F2", ilyenből: "Kc6,D4,F2", meg ilyenből: "Kc6, D4 F2" kiszedni a szóközöket meg a vesszőket. Vagyis pontosabban nekem a karaktersorozatokra lenne szükségem külön külön. Pl a "Kc6"-ra, "D4"-re. A lényeg az, hogy ezeket vesszők vagy szóközök választják el, de azoknak bármilyen kombinációja is lehet, tehát több szóköz is akár, vagy csak szóköz, csak vessző.
Köszi a segítséget előre is
Üdv, Chapell
- 27040 megtekintés
Hozzászólások
Azt ugyan nem mondtad meg hogy a vegen pontosan milyen formaban akarod latni a kimenetet, de kezdetnek ez segithet. Kicsit hosszu es maceras, biztos van egyszerubb is.
cat [file] | sed -e 's/ +/_/g' | tr -s "," "_" | cut -d "_" -f[oszlop szama]
Ezzel minden szokoz(akarhany) vagy vesszo elvalasztot lecserel
1db _jelre, majd
a 'cut'-nak megmondod hanyadik mezo kell, es azt fogja dobni.
szerintem...
---
PtR
- A hozzászóláshoz be kell jelentkezni
tr "," " " < foo | awk '{ for(i=1;i<=NF-1;i++){printf "%s ", $i}; print $NF;}'
- A hozzászóláshoz be kell jelentkezni
cat minek?
szokjatok mar le a catrol :)
http://weho.st
never happen if you never try
MD_Update(&m,buf,j); /* purify complains */
- A hozzászóláshoz be kell jelentkezni
A macska rúgja meg! :-)))
- A hozzászóláshoz be kell jelentkezni
tr -s ", " "\n\n"
Cserélhetsz persze 1-1 szóközre is.
- A hozzászóláshoz be kell jelentkezni
excel-ben akarmilyen delimitert megadhatsz, pl vesszot _es_ szokozt is ;-)
- A hozzászóláshoz be kell jelentkezni
Meg jo hogy "shellscript kerdes" topic-al nyitotta.
- A hozzászóláshoz be kell jelentkezni
es openoffice-ban?
udv Zoli
- A hozzászóláshoz be kell jelentkezni
Ha komoly a kérdés, akkor igen, ott is.
Csaba
- A hozzászóláshoz be kell jelentkezni
Köszi a segítséget mindenkinek. gd megoldása lett a befutó, mivel az is a legegyszerűbb. Köszi mégegyszer a segítséget :)
- A hozzászóláshoz be kell jelentkezni
sed -e 's/ +/_/g' -e 's/\,/_/g' file
- A hozzászóláshoz be kell jelentkezni
Sziasztok,
nem értek sajna a shell scriptekhez, de írnom kellene egy olyat ami a következőt csinálja:
a paraméterként kapott könyvtárban található, "3" vagy "4" számjeggyel kezdődő fájlneveket a "marha" nevű fájlba írja, a fájlba írt fájlnevek számát pedig a "tehen" nevű fájlba.
Megköszönném ha segítenétek!
sziasztok
- A hozzászóláshoz be kell jelentkezni
$ ls -1 $1/3* $1/4* > marha
$ wc -l marha > tehen
- A hozzászóláshoz be kell jelentkezni
köszönöm! most sokat segítettél! szia
- A hozzászóláshoz be kell jelentkezni
Haat, azert ez igy ebben a formaban nem teljesen igaz.
$ find $1 -maxdepth 1 -type f -name 3\* -o -name 4\* > marha
$ wc -l < marha > tehen
A te megoldasod csak 2 sebbol verzik: ha van egy 3-mal vagy 4-gyel kezdodo mappa, akkor az is bekerul a fajlba, illetve ebbol adodoan ha az illeto mappanak van tartalma, akkor az kerul be a fajlba es nem a mappa neve.
Ja, illetve a marha-ba szerintem csak egy szam kell.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
hello mindenki!
ha valki tudna nekem segteni azt nagyon megköszönném shell scritben.
a feladat ez lenne: Írjon shell scritet, amely két paramétert kap. Megvizsgálja, hogy az első paraméterben kapot nevű felhasználó bejelentkezett e. Ha igen, írjon a második paraméterba megadott nevű fájlba a nevét, és hogy "bejelentkezett".
előre is köszi
- A hozzászóláshoz be kell jelentkezni
$ users | tr ' ' '\n' | sort -u | grep -x $1 | sed 's/$/\tbejelentkezett/' > $2
- A hozzászóláshoz be kell jelentkezni
who + grep
Szerintem...
például:
who | grep meditor
ez kiírja, hogy a meditor hányszor és hol jelentkezett be.
Ha a kimenet hossza > nulla, kiírod a fájlba a megfelelő dolgokat.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Valaki tudna segiteni?
irjon sc amely a kecsege,vidra,poszata,beka szavakat kaphatja.ha mas parametereket kap,,hibajelzest ad,egyebkent a hal,keteltu,emlos szavak valamelyiket irja a kepernyore?
Elore is koszi!!
- A hozzászóláshoz be kell jelentkezni
házit írunk?
- A hozzászóláshoz be kell jelentkezni
nem zh!
- A hozzászóláshoz be kell jelentkezni
tehát nem megengedett segítséget használsz? ;-)
- A hozzászóláshoz be kell jelentkezni
Hat igen!
Nagyon megköszönném a segitseget
- A hozzászóláshoz be kell jelentkezni
4 sör
- A hozzászóláshoz be kell jelentkezni
ok!
Mikor,hol?
- A hozzászóláshoz be kell jelentkezni
de inkább készülj fel rendesen, és menj el pótzhra
- A hozzászóláshoz be kell jelentkezni
ez mar az
- A hozzászóláshoz be kell jelentkezni
melyik suli?
- A hozzászóláshoz be kell jelentkezni
veszpremi egyetem
- A hozzászóláshoz be kell jelentkezni
ha nem tudsz segiten legysz azt is ird meg
- A hozzászóláshoz be kell jelentkezni
csinálsz egy tömböt/hash-t és a bemenet lesz a kulcs, a kírandó adat pedig a kulcshoz tartozó érték. :)
vagy csinálsz if-eket, mer' az nem olyan szép, de könnyebb. :)
- A hozzászóláshoz be kell jelentkezni
es nem tudodnad leirni konkretan?
- A hozzászóláshoz be kell jelentkezni
Ha már itt a neten lógsz akkor nyisd meg az advanced bash scripting guide-ot és másold ki belőle az egyik példaprogit a hetes fejezetből. Legalább ennyit dolgozz :)
- A hozzászóláshoz be kell jelentkezni
ez megvolna
- A hozzászóláshoz be kell jelentkezni
akkor innen egyenes út vezet a megoldásig.
- A hozzászóláshoz be kell jelentkezni
Eleg szomoru, hogy a google-val keresni se tanultal meg. Nem tudom minek valaszt valaki olyan targyat, amihez nincs affinitasa.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Akkor meg jogsz bukni, jogosan :)
- A hozzászóláshoz be kell jelentkezni
Akkor már inkább fogosan, nem? :)
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
az eredeti kérdés az elte progmat porgkör beadandójához kapcsolódott, de csak segítséget kért, nem megoldást :)
Szóval ezt a kérdést előbb is feltehetted volna...
- A hozzászóláshoz be kell jelentkezni
ennel egyszerubb feladatot egyebkent nehez adni, itt egy specko megoldas agyuval_verebre-style
cat << EOF | (grep ^$1: || echo :hiba) | cut -d ':' -f2
roka:ravasz
beka:zold
golya:tollas
EOF
- A hozzászóláshoz be kell jelentkezni
orok hala.nagyon szepen koszonom.nagyon rendes voltal!
- A hozzászóláshoz be kell jelentkezni
ez a megoldas egyebkent *nagyon_nem* trivialis, ugyhogy lehet hogy kilog majd a lolab :)
- A hozzászóláshoz be kell jelentkezni
na ja de itt a "kaphatja" szó, magyarán még olyan bonyolult dolgokat kell elvégezni, mint leellenőrizni, hogy van e paraméter a parancssorban, aztán ha nincs ( if [ -z $1 ]; then echo "nincsen parameter"; exit; fi ), utána meg még több ifel meg kellene nézni, hogy vajon a bemenet beka e (if [ $1 == "beka" ]; then echo "keteltu"; fi ). Egyébbként, meg ha nincs bent a négy közül valamelyikben a bemenő paraméter szintén error. És ez elismerheted nem könnyű. :)
A te példád ömlesztett adatokkal dolgozik.
- A hozzászóláshoz be kell jelentkezni
Hát igen, igen, sőt, ha teszemazt úgy írja, hogy Beka, akkor azt is ellenőrizni kéne, tehát az összes kis- es nagybetűs kombinációra egy ifet lehetne, ami aztán tényleg nem könnyű:) De milyen ömlesztett adatokról beszélsz? Meg azért elegáncs nem?
- A hozzászóláshoz be kell jelentkezni
Ja elegáncs nagyon, csak szerintem a vizsgán a standard input kezelésére és a test-re kiváncsi a tanár, mint egyszerű műveletekre. Úgyhogy ahogy írtad, eléggé kilógna a lóláb, ha beadná a srác a Te változatodat. Pláne ha még kis-nagybetű ellenőrzéssel is kiegészítenéd. :)
Bár a paraméterek adottak és ha mást adna be, akkor error. Legalábbis az én olvasatomban.
- A hozzászóláshoz be kell jelentkezni
Ott egy (grep ^$1: || echo :hiba) mint hibakezelés, vagy ez nem elég jó?
igaz, úgy kellett volna, hogy grep ^"$1": mert így bebukja a szóközös inputot..
- A hozzászóláshoz be kell jelentkezni
jóvanmá :)
ezt kiveséztük.
- A hozzászóláshoz be kell jelentkezni
Szerintem nem kellene if minden kombinációra. Én az ilyen feladatokat case -el csináltam meg és [B|b]eka. ha jól emlékszem így.
De ki is próbálom rögtön :) A hibakezelést pedig én csak if-el tudom. Vagy van paraméter vagy nincs.
Szerk: én így csináltam volna
if test $# -ne "0";
then
case $1 in
Kecske|kecske)
echo "emlos";
;;
Vidra|vidra)
echo "emlos";
;;
Poszata|poszata)
echo "madar";
;;
Beka|beka)
echo "keteltu";
;;
*)
echo "ERROR: a hasznalhato szavak: kecske, vidra, poszata, beka";
;;
esac
else
echo "nincs parameter";
fi
- A hozzászóláshoz be kell jelentkezni
En is igy csinaltam volna. Eltekintve attol, hogy en [Bb][Ee][Kk][Aa] hasznaltam ovlna, sokkal hibaturobb.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
uc()
__________
"It's nice to be important, but it's more important to be nice"
- A hozzászóláshoz be kell jelentkezni
Az egy dolog, hogy valaki jár körbe egy témát és elakad, kiteszi
az elakadásjelzőt és azt kérdi: van-e valaki, aki ugyanígy járt?
És egy másik dolog, hogy mással csináltatjuk meg a zh-nkat. Ezen
már egyetemista koromban is mindig kiakadtam.
Szóval ez itt így már feladatmegoldó nagyüzem.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Tudod hány tartószerkezetek házit (c progika) csináltam meg lányoknak a suliban? Ma is azokból az emlékekből élek. Csak az asszony meg ne tudja. :)
Na ezért féltem a lányom az egyetemtől. :)
- A hozzászóláshoz be kell jelentkezni
A tartószerkezet házi az úgy készül, hogy bementek egy házba
és tartjátok a szerkezetet? Vagy a szerkezet tart valamit?
Vagy a lány tart a szerkezettől? Sajnos a témában járatlan vagyok,
de lány az biztosan kell hozzá, ezen nem lehet vita (-::
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
szerinted ki hozza a sört, vagy ki főz kávét (esetleg ebédet), amíg te dolgozol? :-)
- A hozzászóláshoz be kell jelentkezni
Na ja! :)
Ő tartja, aztán csűrünk-csavarunk, aztán majd kijövök belőle valahogy. :)
(Amúgy tartószerkezetek(hidak, tetőszerkezetek, rácsos tartók) nyírását csavarást kellett kiszámolni adott ponton jelentkező erőhatásokkal képletek és vektorok segítségével. Az egész nem ért volna semmit, ha nem lettek volna a lányok és a jutalom: vasalás, mosás, főzés, egyébb szolgáltatások. Ez utóbbi sajnos kimerült legtöbbször a számomra értelmetlen tantárgyak jegyzeteinek átadásával illetve azok egyéni feladatának megoldásával. Sajnos. :) Mér' van az, hogy legtöbbször a nagymellű istentelenül sexy lányok nem értik az épületszerkezettant? )
- A hozzászóláshoz be kell jelentkezni
Mer' azok szőkék. Vagy vörösök. Vagy barnák. Esetleg feketék.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Sziasztok,
azért írok ide most, mert igaza van meditronak ez már tényleg egy feladatmegoldó nagyüzem. Szeretném kimenteni a nickemet. Csoportból kérdezték tőlem egy páran, hogy hol kaphatnak információt a shell-el kapcsolatban. Ajánlottam nekik a hup.hu-t. Fel is keresték, de nem tudtak valami miatt regelni. Én meg voltam olyan rendes, hogy engedtem belépni őket az én adataimmmal. Nem hittem, hogy ennyire nem tudják. Szóval örülök, hogy azért segítséget kaptak és remélem tanultak is belőle. Ha jól hallottam akkor 2-3-as jegyeket kaptak. De ennyi segítséggel jobbra számítana az ember, de mégse. Pedig ahogy végignéztem a válaszaitokat, abban nem lehet kétség. Tehát ez történt :)Lehet, hogy többet ilyen nem lesz.
további szép estét mindenkinek
- A hozzászóláshoz be kell jelentkezni
Az elejen lehettel volna becsuletes, es mondtad volna, hogy oldjak meg. Az a gond, hogy 1) ha tanar olvassa, ki is talalhatja hogy te ki vagy valojaban, es siman megjarhatod 2) ha ez megvan, akkor az egesz csoport is meg fogja szivni. Szoval imadkozz.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Tudna valaki olyan linket adni, ahol shell script példák vannak. Nem a leg egyszerűbb feladatok kellenének, hanem egy fokkal összetettebb, bonyolultabb. (zh-ra felkészülni)
Keresőkben nem találtam, csak alap feladatokat.
(shell, bash)
- A hozzászóláshoz be kell jelentkezni
Már ezerszer le lett írva, de azér' mégeegyszer: Advanced Bash Scripting Guide ...itt mindenféle komoly dolgokkal is foglalkoznak. Extra megoldásokat mutatnak be, stb....tényleg érdemes itt kezdeni. Aztán még hozzáolvashatsz egy kis sed-et meg awk-t.
- A hozzászóláshoz be kell jelentkezni
Köszi szépen! Remélem a gyenge angol tudásommal is menni fog.
Minden jót!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Nem meglepő módon segítséget szeretnék kérni ahogyan azt előttem már többen is tették. Adott egy fiktív adat file aminek az első néhány sora a következőképpen néz ki:
1.,Balogh Elvira,hölgy,1988.06.02.,Sárospatak,85000
2.,Dudás Diána,hölgy,1967.03.16.,Simontornya,101000
3.,Kocsis Vince,úr,1936.10.28.,Várpalota,74000
Ilyesmi lekérdezéseket szeretnék csinálni
Melyik fizetés a leggyakoribb a Budapestiek körében?! Írassuk ki az egyes
fizetéseket, illetve a számukat két oszlopban egymás mellé, fizetés szerint növekvő
sorrendben. awk-val kéne megoldani
erre megoldás
sort -k6 -n -t, adat | awk -F, '($5 == "Budapest") { print $6 }' | uniq -c | awk '{ print $2" "$1 }'
1, A problémám az, hogy a megfogalmazásban az áll, hogy melyik a leggyakoribb keresztnév akkor nem tudom, hogy mitévő legyek, hiszen az ,-vel 6 oszlopra bontjuk a táblát és nem tudom, hogy tudnám rendezni csupán keresztnév szerint.
2, Továbbá ha hónap, csak hónap szerint szeretném rendezni és azokat megszámolni, akkor sem tudom mit tehetnék, a substr -gel le tudom csípni a dátum végét, de akkor megmarad az év, és az sem kéne nekem.
Továbbá lenne pár sed-del kapcsolatos kérdésem is. Ugyanezen az adat file-lal kell dolgozni de csak sed-del. Ha a ,-ket tab-ra kell cserélni az még megy ugye a sed s/,/|t/g -vel de sajnos megáll a tudományom ha olyanokat kéne csinálni mint:
3, azokat a sorokat törölje amelyikben a születési dátum 19.-e (vagy bármilyen más nap után) van
4, az úrakat tartalmazó sorokat duplán írja ki
5, az úrakat tartalmazó sorokat üres sorral helyettesíti
6, páratlan számú sorokat törli
7, valamelyik (mondjuk az első) oszlopot törli
8, az év második felében születettek sorát duplán írja ki
9, a hölgyeket tartalmazó sorok elé beszúr egy üres sort
Bármilyen segítségnek örülnék.
Minden jót!
Tommy
- A hozzászóláshoz be kell jelentkezni
Üdv!
Egy routeren futó ip_conntrack táblájából (cat /proc/net/ip_conntrack) szeretném kigyűjtenyi, hogy melyik router mögötti IP hány kapcsolatot létesített a script futásának idején. Hogyan tudom ezt kiszűrni? (Esetleg van rá megfelelő célprogram?)
Petya
- A hozzászóláshoz be kell jelentkezni
Üdv!
Próbálkozom:
for line in `cat /proc/net/ip_conntrack | awk '{print $1, $4, $5, $6}'`
do
....
done
Ez így nem jó, azt szeretném, hogy a for cikluson belül a line változóban az egész sort lássam, vagyis hogy a for ne a szóköznél, hanem a newline karakternél válassza el a lista elemeit. Megoldható ez?
Petya
- A hozzászóláshoz be kell jelentkezni
while read do
echo "$REPLY"
done < /proc/net/ip_conntrack
--
maszili
- A hozzászóláshoz be kell jelentkezni
Ez nálam syntax error-t dob.
Szerk:
while read
do
echo $REPLY
done < /proc/net/ip_conntrack
így már nem, köszi
Petya
- A hozzászóláshoz be kell jelentkezni
Mert véletlenül lemaradt a pontosvessző...
while read ; do
--
maszili
- A hozzászóláshoz be kell jelentkezni
a for elé írd be:
IFS="$'\n'"
- A hozzászóláshoz be kell jelentkezni
Üdv!
#!/bin/bash
IFS="$'\n'"
for line in `cat /proc/net/ip_conntrack | awk '{print $1, $4, $5, $6}'`
do
echo $line
echo -------------------
done
Ennek elvileg minden conntrack sor után kellene kötőjeleket raknia, de csak az utolsó után rak.
Petya
szerk: IFS=$'\n', így már megy. Köszönöm!
- A hozzászóláshoz be kell jelentkezni
né, ilyenkor nem szereti az idézőjelet. Őszintén bevallom: soha nem raktam még köré idézőjelet (macskakörmöt), csak most biztosra akartam menni. Nem nyert :)
- A hozzászóláshoz be kell jelentkezni
Van újabb probléma :)
if [ ! ( ( `echo $src | cut -c-10` == "ip.sub.net") -a (`echo $dst | cut -c-10` == "ip.sub.net") ) ]
then t=1
else t=0
fi
Ez miért nem jó? Elvleg a man alapján csináltam.
Petya
- A hozzászóláshoz be kell jelentkezni
Mit is szeretnél csinálni?
Mondd el szavakkal... lehet hogy van rá egy sokkal egyszerűbb út mint amit elkezdtél.
--
maszili
- A hozzászóláshoz be kell jelentkezni
Üdv!
Azt szeretném meghatározni, hogy melyik IP-ről hány kapcsolatot kezdeményeznek a routeren keresztül. A conntrack modult nem is használja egyébként ez a router, csak azért töltöttem be, hogy lehessen kimenő/bejövő kapcsolatszámot nézni. Eddig ezt kézzel csináltam, de jó lenne egy script ami az összes IP-re megadja a kapcsolatok számát. A conntrack tábla tartalmaza ezt az információt, azért gondoltam hogy ebből szedem ki valahogy. Ha van egyszerűbb megoldás, akkor kíváncsi vagyok rá :)
szerk: a konrkét kérdésben szereplő rész pedig azért kell, hogy kiszűrjem azokat a kapcsolatokat, amelyek mindkét "vége" az én subnetemben van, így nem megy át a routeren.
Petya
- A hozzászóláshoz be kell jelentkezni
a zárójel sztem subshellt indít, a [ parancs már nem látja...
if [ ! ( ( `echo $src | cut -c-10` == "ip.sub.net") -a (`echo $dst | cut -c-10` == "ip.sub.net") ) ]
helyett
if [[ `echo $src | cut -c-10` != "ip.sub.net" || `echo $dst | cut -c-10` != "ip.sub.net" ]]
- A hozzászóláshoz be kell jelentkezni
awk '{printf "%s %s %s %s\n---------------\n", $1, $4, $5, $6 }' /proc/net/ip_conntrack
- A hozzászóláshoz be kell jelentkezni
Helo!
Készítettem egy szkriptet ami kiszedi a mail logokból , hogy hány levelet dobozz vissza a spamhaus. Ezt napi bontásban elkészíti a következő formában: cat spam_statistic_2007_Aug.txt
2007 Aug. 1. spam: 246
2007 Aug. 2. spam: 927
2007 Aug. 3. spam: 362
2007 Aug. 4. spam: 103
[...] 31-ig
Minden hónapot külön file-ba, de ez mindegy.
Most össze akarom számolni, lehet, hogy nem jó módszerrel, de ez jutott eszembe. Programozni nemtudok, tehát nincs meg hozzá a megfelelő szemléletem :) Tehát így próbálkoztam:
#!/bin/bash
COUNTER="1"
SPAMSZAM="0"
while [ $COUNTER -le "31" ]; do
SPAM=`cat spam_statistic_2007_Aug.txt | grep "$COUNTER\." | awk '{print $5}'`; # ezzel kiszedem a számot a sorok végéből
SPAMSZAM=`expr $SPAMSZAM + $SPAM`; # ezzel van a gond
COUNTER=`expr $COUNTER + 1`; # ez jó, mert az előző sor nélkül nem volt hiba
done
echo "A spamok osszesen: $SPAMSZAM";
Hibajelenség:
./count.sh
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error
A spamok osszesen: 8020
A poén, hogy jól számolta meg, mert ha akármelyik sorba egyel nagyobb számot írok, akkor az eredmény is egyel több. De akkor miért syntax error? És miért csak 9?
- A hozzászóláshoz be kell jelentkezni
hmm, ha a második változót kicserélem sima számra akkor nincs baja.
Két változót nem lehet összeadni?
- A hozzászóláshoz be kell jelentkezni
Nalam, (igaz csak 4-ig) rendben lefutott. Irasd ki a SPAM valtozot az expr elotti sorban.
- A hozzászóláshoz be kell jelentkezni
Bocsi, de akkor bemásolom az eredményt:
246 199 287 143 # a 256 az 1-ben, 199 a 10 és 11-ben a 287 a 21-ben
a 143 a 31-ben van :S:S:S:S
expr: syntax error
927 292 373
expr: syntax error
362 180 288
expr: syntax error
103 568 645
expr: syntax error
470 378 595
expr: syntax error
443 583 433
expr: syntax error
484 435 433
expr: syntax error
273 331 234
expr: syntax error
272 436 274
expr: syntax error
199
199
292
180
568
378
583
435
331
436
532
287
373
288
645
595
433
433
234
274
182
143
A spamok osszesen: 8020
- A hozzászóláshoz be kell jelentkezni
Tudom mi a baj:
SPAM=`cat spam_statistic_2007_Aug.txt | grep "$COUNTER\." | awk '{print $5}'`;
Amikor a COUNTER-nek az értéke 1 az az 4-szer matchel
1.
11.
21.
31.
ha COUNTER=2 akkor
2.
12.
22.
Szóval mást kell kitalálnom erre
- A hozzászóláshoz be kell jelentkezni
grep " $COUNTER\."
- A hozzászóláshoz be kell jelentkezni
igen, a helyes megoldás:
SPAM=`cat spam_statistic_2007_Aug.txt | grep " $COUNTER\." | awk '{print $5}'`;
Vagyis tettem egy szóközt a $COUNTER alá.
Igy ha a COUNTER ="1"
Akkor a grep így keres: " 1."
Ha 2 akkor: " 2."
Viszont most:
A spamok osszesen: 11600 :)
nah akkor számoljunk telóval is azért ...
- A hozzászóláshoz be kell jelentkezni
ha mar grep, akkor ne cat foo | grep bar, hanem grep bar foo
t
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
Counter=0
while read; do
Counter=$((${Counter}+${REPLY##*" "}))
done < <(cat file.txt)
echo $Counter
Szerk:
bocs... félreértettem a feladatot
Ez egy fájlban lévő számokat adja össze.
--
maszili
- A hozzászóláshoz be kell jelentkezni
Katasztrófa. No lássuk. Így néz ki a fájl:
===
2007 Aug. 1. spam: 246
2007 Aug. 2. spam: 927
2007 Aug. 3. spam: 362
2007 Aug. 4. spam: 103
[...] 31-ig
===
Azaz egy sor összesen áll 5 db szóközökkel, tabulátorokkal elválasztott adatból, amiből az utolsót kell összeadni. Feltételezem, hogy *csak* ez van a fájlban, így ahogy ideírtad.
a) Megoldás awk-kal
awk '{ a += $5 } ; END { print a } ' spamfile
b) feltétel ugyanez, de nem használok awk-t, csak a shell lehetőségeit:
osszdb=0
while read ev ho nap spam db
do
osszdb=$(( $osszdb + $db ))
echo $osszdb
done < spamfile | tail -1
(Ez a "ciklusban kiiratom, majd kiszűröm az utolsó sort" -baromság azért van, mert létezik egy elég sok shellben létező hiba, ami miatt a ciklus belsejében levő változó értékadás a cikluson kívül nem látszik (bár általában "ciklus pipe-ban" esetben jelentkezik, így jelen helyzetben felejthető, azaz elég a ciklus után 1 db kiíratás simán.)
c) ha van kedved, játszhatunk még, hogy rakok bele awk-t *is* , meg shell konstrukciókat *is*, esetleg egy kis grep-et *is* expr-rel megfejelve - de minek. (Ja, és ha a grep-nek adott mintában nem használsz semmi regexp-et, akkor ne eltakard a speciális jelentésű karaktert, hanem használj fgrep -et (POSIX-ül "grep -F" -et helyette, egyszerűbb, átláthatóbb a végeredmény.)
Ha nagyon szépen megkérsz, akár a te kódodból is lehet működő verziót barkácsolni, csak kicsit sok mindent akarsz használni. (Pl. ha van egy grep | awk valahol, akkor szinte biztos megoldható grep nélkül, lévén az awk is tud mintaillesztést. És í. t. No offense.)
- A hozzászóláshoz be kell jelentkezni
:-)
- A hozzászóláshoz be kell jelentkezni
Hmm, köszi :)
Mostmár nem megyek vissza, hogy megnézzem írtam e első hozzászólásomban, de ezt a szkriptet azért csináltam így, mert jelenlegi tudásommal ennyire futotta sajnos. Általában miután sikerült valamit "úgyahogy" megcsinálni, szoktam egyszerűsíteni ha tudom. (Pl kóstolgatom a PHP-t munka miatt, és egyszer megcsináltam egy sorbarendezést jó sok kódsorból, mire befejeztem rájöttem hogy lehet harmad annyi kódsorból ugyanazt megcsinálni :))
Ez nagyon tetszik,
awk '{ a += $5 } ; END { print a } ' spamfile
Engem minősít, hogy én ugyanezt milyen körülményesen csináltam meg :) De működik, és sikerült megcsinálnom a feladatom időre, egyelőre ez volt a legfontosabb.
"Ha nagyon szépen megkérsz, akár a te kódodból is lehet működő verziót barkácsolni, csak kicsit sok mindent akarsz használni."
NAGYON szépen megkérlek :), sőtt, ha van kedved (mert talán csak szemetelnénk ide a fórumba) megadom a skype nevem vagy mail cimem.
Thx / budacsik
Szerk.: egy régi problémám, hogy nem tudom megcsinálni azt, hogy pl van egy konfig fájl, amiben az van beállítva, hogy:
opcio1="ertek1"
opcio2="ertek2"
opcio3="ertek3"
opcio4="ertek4"
Tehát tipukus konfig fájl. Amit egy kis kérdez felelekkel (echo "...?";read VALASZ1;) tudnék kitölteni, változtatni. Ha eszembe jut konkrét eset majd megírom :)
- A hozzászóláshoz be kell jelentkezni
Igen, írtad, hogy nem tudsz programozni, tehát nem szidtalak. A két rövidebb megoldást is azért írtam, hogy lásd, ha ismerjük jól a feladatot - és az eszközöket -, akkor könnyebb esetleg működő - és átlátható ! - kódot írni. (Elsőre nem is értettem a kódodat, így eltartott egy darabig, mire rájöttem, hogy mi a baj.)
Most nem érek rá (éppen shell használatot kell tanítanom :-) ), de igyekszem visszatérni a te megoldásodra, kicsit kivesézni és működő állapotba hozni.
- A hozzászóláshoz be kell jelentkezni
Mail ment :)
- A hozzászóláshoz be kell jelentkezni
2. probléma:
Marha egyszerű: van egy sablon, amiben az értékek helyén mondjuk '|' karakter van, meg van a konfig.
Behúzod az adatokat, bekéred az új adatokat read-del, majd:
cat template | \
sed -e "/opcio1=/s,\|,${opcio1}," \
-e "/opcio2=/s,\|,${opcio2}," \
-e "/opcio3=/s,\|,${opcio3}," > /etc/configfajl
amire nagyon oda kell figyelj, az az, hogy a standard sed parancssortól eltérően itt macskakörmök közé kell tenni az értéket, hogy a váltzó behelyettesítődjön. Ha aposztófok között lenne, nem helyettesítőne be.
- A hozzászóláshoz be kell jelentkezni
Ejha, sablon ... tényleg :)
Köszi
- A hozzászóláshoz be kell jelentkezni
Üdv.
Egy olyan problémám lenne, hogy adott egy sima text file. Ebben a fileban szeretnék egy sor ("egy megadott string") elé vagy mögé egy újabb sort beszúrni. Ez az adott sor ami elé vagy mögé _új sorba_ kellene beszúrni sehol máshol nem fordul elő a fájlban. Gondolom sed vagy awk kellene hozzá? De nem igazán jövök rá a titok nyitjára :)
- A hozzászóláshoz be kell jelentkezni
sed -e '/amit keresk/a\
amit moge akarok szurni\
minden sor moge\
kell a hanyatttortvonal\
az utolso sorig' file
És ha nem mögé, hanem elé, akkor a minta sorában nem a, hanem i a parancs.
- A hozzászóláshoz be kell jelentkezni
Ha elé: sed 's/.*szoveg.*/\n&/'
Az escape szekvenciák működnek, az & jel a teljes, illeszkedő részt jelöli
- A hozzászóláshoz be kell jelentkezni
köszönöm a segítséget közben rájöttem én is :) utóbbi módszerrel csináltam.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Szeretnék segítséget kérni, mégpedig hogyan lehetne egy ilyen adatból?
___
A1:VIT ____. ( A B C )
B1:IGE ___ ( 1 VI Z )
C1:ZAJ ___ ( 2 I G A )
___________( 3 T E J )
____
a táblázatnak ugy kell kinézni mint a másodiknak. az első feésorolásnál a betű az oszlop a szám a sort jelenti a lényeg hogy alakitsa vissza az elsőből a másodikra a szkript... teljesen tanácstalan vagyok. elég ha csak valamilyen irányt adtok meg egy oldalt ahol összesítve megtalálom a shell hasznosabb érdekesebb parancsait. Elöre is köszönöm!
- A hozzászóláshoz be kell jelentkezni
csak nem unix6? :) én tömbökkel csináltam meg...
- A hozzászóláshoz be kell jelentkezni
De és köszönöm :) Amugy ebből lesz bajom hogy itt segítségetkértem?
- A hozzászóláshoz be kell jelentkezni
amíg nem másssal csináltatod meg, addig nem lesz bajod (mármint a lényegi részét ne máshonnan vedd)
- A hozzászóláshoz be kell jelentkezni
nem gondoltam hogy mással csináltatom meg, nagyon szeretnék tudni programozni a unixban megpersze másban is. Tisztában vagyok vele hogy egyedül kell végig csinálnom különben semmit nem fog érni :/Csak még kicsi az én tudásom ilyen nagy feladatokhoz, gyakorolnom kellene meg példákat látnom, talán jobban menne :)
- A hozzászóláshoz be kell jelentkezni
van egy acces adatbázisom, csak ékezetes, mySQLbe konvertálva elcsesződiknek az ékezetek. sql-be exportáltam és az ékezetek elcsúsztak (%$ß |) sz@arak stb...
megvannak a karakterláncok pl: ő betű &#o ezeket hogy cseréljem ki o -ra?
--
Xiluka
- A hozzászóláshoz be kell jelentkezni
cat fajl.text | sed s/"&#o"/"o"/g > out_fajl.text
Kicserélgeti a &#o karakterláncokat o ra.
cat fajl.text | sed s/"&#"/""/g > out_fajl_2.text
Kiszedi a &# karakterláncokat a fájlból
vagy
cat fajl.text | tr -d "#" | tr -d "&" >> out_fajl_3.text
Ez kiszedi a fájlból a kettőskereszteket és az "és" jeleket
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Hamár homár...:
sed s/"&#o"/"o"/g fajl.text > out_fajl.text
Kicserélgeti a &#o karakterláncokat o ra.
Kiszedi a &# karakterláncokat a fájlból:
sed s/"&#"/""/g fajl.text > out_fajl_2.text
vagy:
tr -d "#&" < fajl.text > out_fajl_3.text
- A hozzászóláshoz be kell jelentkezni
A tr annyira nem jo otlet, lehet a # vagy c karakter ertelmes adat is... Csak egyutt kepeznek specko adatot
- A hozzászóláshoz be kell jelentkezni
Igen, de kettővel feljebb ez el lett mesélve.
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Egy probléma megoldásában szeretnék segítséget kérni.
Adott egy elég nagy könyvtárstruktúra, melyben szétszórva következő formátumú file-ok vannak: foo.a00, foo.a01, foo.a02, stb..
Valahogyan egy adott könyvtárba kellene azokat a file-okat másolni, melyek csak kiterjesztésükben térnek el.
Tudtok esetleg valami megoldást javasolni?
Előre is köszi!
- A hozzászóláshoz be kell jelentkezni
Engem is érdekelne, h. miként lehet a find eredményét rendesen odaadni a cp-nek?
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
-exec kapcsoló?
Nagyvonalakban:
find /ahol/keresek -name "foo.*" -exec cp {} /ide/tedd/. \;
- A hozzászóláshoz be kell jelentkezni
Nagy vonalakban nekem is megvan. Nekem tutipontosan kellene az infó.
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Tudod a unix több, mint kód, filozófálgass a find man oldalain ;P
Bocs nem bírtam kihagyni ;)
A parancs tutipontos, neked csak be kell helyettesítened a változókat, ennél jobban már nem tudom a szádba adni:
fifi@blackdragon:~$ ls -l *.jpg
-rw-r--r-- 1 fifi fifi 5153 2006-09-28 19:31 FifiTheReal.jpg
-rw----r-- 1 fifi fifi 27039 2007-10-16 17:03 Image(034).jpg
-rw----r-- 1 fifi fifi 18687 2007-10-16 17:04 Image(035).jpg
-rw-r--r-- 1 fifi fifi 176035 2007-08-11 09:26 sensors-2.6.21.1.jpg
fifi@blackdragon:~$ ls -l tutijo
ls: tutijo: No such file or directory
fifi@blackdragon:~$ mkdir tutijo
fifi@blackdragon:~$ find . -maxdepth 1 -name "*.jpg" -exec cp {} tutijo \;
fifi@blackdragon:~$ ls -l tutijo
total 228
-rw-r--r-- 1 fifi fifi 5153 2007-11-27 21:03 FifiTheReal.jpg
-rw----r-- 1 fifi fifi 27039 2007-11-27 21:03 Image(034).jpg
-rw----r-- 1 fifi fifi 18687 2007-11-27 21:03 Image(035).jpg
-rw-r--r-- 1 fifi fifi 176035 2007-11-27 21:03 sensors-2.6.21.1.jpg
fifi@blackdragon:~$
Bye, Fifi
Szerk.: Persze ha vannak "elfajzott" filenevek, akkor nem árt a cp után a "{}" használata inkább.
- A hozzászóláshoz be kell jelentkezni
Vagy xargs-szal:
find -name foo.* | xargs cp -t célkönyvtár
- A hozzászóláshoz be kell jelentkezni
AHONNAN alatt alkönyvtárak is vannak és mindenfelé véletlenszerűen előállított fájlokat tettem, amelyeknek proba.valamilyen kiterjesztés, vagy csak simán proba volt a nevük kiterjesztés nélkül. Ezeken kívül sok egyéb állomány is volt az alkönyvtárakban véletlenszerűen.
find ./AHONNAN/ -name "amikellfile*" | xargs cp -t ./AHOVA
Csupán a cp -t kapcsolója kellett nekem, köszönöm!
Persze a megtalált azonos nevű fájlokat nem írogatja felül...
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
eval `ls | sed -r 's#(.*)\.[^.]+$#mkdir -p valahol/\1; cp -a & valahol/\1#' `
nem próbáltam ki :)
- A hozzászóláshoz be kell jelentkezni
Én az enyémet igen
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Csak hogy még egy ötlet legyen a többi jó mellett :) :
for i in $(find -name foo.*); do cp $i <cél>; done
én így csinálnám...
[szerk]: bocs, rossz helyre válaszoltam... kt0m -nek akartam válaszolni.
Elnéztem :)
---
PtR
- A hozzászóláshoz be kell jelentkezni
ha space van a filenevben, vagy az eleresi utban, akkor a for es a cp is rossz argumentumot fog kapni.
ha aktualis konyvtarban tobb foo.valami is van, akkor hibat fog dobni a find.
igy lenne jo:
(
IFS=$'\n'
for i in $(find -name 'foo.*'); do cp "$i" <cel>; done
)
- A hozzászóláshoz be kell jelentkezni
Valóban. Megfeledkeztem a szóközt tartalmazó fájlnevekről...
---
PtR
- A hozzászóláshoz be kell jelentkezni
És az újsor karaktert tartalmazó fájlnevekről is :)
- A hozzászóláshoz be kell jelentkezni
Amikor nem tudni előre az elemszámot, akkor a for szerkezetet elfelejteném, nehogy too many arguments hibával száljon el. Ekkor a find -exec kapcsolóját vagy az xargs-ot használnám inkább.
- A hozzászóláshoz be kell jelentkezni
Nem az 'argument line too long'-ra gondoltal? Mert az itt nem jon elo.
- A hozzászóláshoz be kell jelentkezni
ami az xargs esetén is előjön. A find -exec esetén viszont nyilván nem.
- A hozzászóláshoz be kell jelentkezni
Miért jönne elő xargs esetén? Ha túl hosszú, feldarabolja, és többször hívja meg a parancsot.
- A hozzászóláshoz be kell jelentkezni
Lásd ch kolléga előző megjegyzését, kiegészítve azzal, hogy az xargs-nak simán meg tudod mondani, hogy hány argumentumot pakolhat max. a parancs argumentum-listájába ('-n' kapcsoló), ill. max. hány karakter hosszú parancssort pakolhat össze ('-s' kapcsoló), valamint még számos egyéb hasznos cuccot is (az én kedvenceim: -P, -r), illetve a szóközös file-nevek helyes kezelésére ajánlanám a find-nak a '-print0'-ját kombinálni az xargs '-0'-jával.
- A hozzászóláshoz be kell jelentkezni
hali,
van egy stringem, benne ismeretlen számú (de mondjuk max 10) szóval. Az utolsó 2 v. 3 szót kellene tudnom kiírni.
mivel tudom ezt megcsinálni?
- A hozzászóláshoz be kell jelentkezni
tr ' ' '\n'|tail -n 2|tr '\n' ' '
- A hozzászóláshoz be kell jelentkezni
Ez naon ötletes! Tanultam vmit. Köszi!
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
A szavakat elválasztó "delimiter" függvényében cut parancs, netán awk...
STRING="elsoszo#masodikszo#harmadikszo#negyedikszo#otodikszo"
ebben az esetben lehet
cut -d "#" -f4-5
-d az elválasztó karakter meghatározására jó.
-f4-5 azt jelenti, hogy adja ki a 4.-től 5.-ig a mezőket (field)
Ha az elválasztó karakter szóköz, akkor
STRING="elsoszo masodikszo harmadikszo negyedikszo otodikszo"
cut -f4-5
pölö.
De ebből:
STRING="elsoszo#masodikszo#harmadikszo#negyedikszo#otodikszo"
ezt
STRING="elsoszo masodikszo harmadikszo negyedikszo otodikszo"
legyárthatod a tr parancs segítségével is.
STRING2=`echo $STRING| tr "# " "`
(Asszem a tr parancsnak megadhatod bemenetként a STRING-et echo nélkül, de akkor más a forma és kacsacsőr alkalmazása szükséges.)
Fejből, nem biztos, hogy jól emléxem:
tr "#" " " < $STRING
Ha STRING egy és tíz szó között tartalmazhat szóközzel elválasztott szavakat, akkor awk egy lehetséges alkalmazása:
ELSO=`echo $STRING | awk '{ print $1}'`
MASODIK=`echo $STRING | awk '{ print $2}'`
HARMAS=`echo $STRING | awk '{ print $3}'`
NEGY=`echo $STRING | awk '{ print $4}'`
OT=`echo $STRING | awk '{ print $5}'`
HAT=`echo $STRING | awk '{ print $6}'`
HET=`echo $STRING | awk '{ print $7}'`
NYOC=`echo $STRING | awk '{ print $8}'`
KIL=`echo $STRING | awk '{ print $9}'`
T=`echo $STRING | awk '{ print $10}'`
Itt szintén lehet echo nélküli formát találni, de ezt most hagynám :D
Innen kezdve csak figyelteted, hogy $T üressztring-e, $KIL üresssztring-e és a többi
Ami nem üres sztring (visszafele haladva) onnan a kettő vagy három nem üres sztringet kiíratod...
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Én meg a cut-ot nem ismertem, kösz.
tr-nek (vagy másnak) így adhatsz meg stringet standard bemenetre:
tr "#" " " <<< $STRING
(Amit te írtál, ott a $STRING-ben az input fájl neve lenne.)
- A hozzászóláshoz be kell jelentkezni
És akkor Bash esetében lehet játszani a tömbökkel is (ezt akkor érdemes használni, ha a space nem szeparátor, hanem a keresendő szövegek része):
SEP="#"
TOMB=( "" )
TOMB[0]=$(echo ${STRING} | awk -F ${SEP} '{ print $1}')
TOMB[1]=$(echo ${STRING} | awk -F ${SEP} '{ print $2}')
TOMB[2]=$(echo ${STRING} | awk -F ${SEP} '{ print $3}')
TOMB[3]=$(echo ${STRING} | awk -F ${SEP} '{ print $4}')
TOMB[4]=$(echo ${STRING} | awk -F ${SEP} '{ print $5}')
TOMB[5]=$(echo ${STRING} | awk -F ${SEP} '{ print $6}')
TOMB[6]=$(echo ${STRING} | awk -F ${SEP} '{ print $7}')
TOMB[7]=$(echo ${STRING} | awk -F ${SEP} '{ print $8}')
TOMB[8]=$(echo ${STRING} | awk -F ${SEP} '{ print $9}')
TOMB[9]=$(echo ${STRING} | awk -F ${SEP} '{ print $10}')
Egy kicsit csaltam a szintaxissal... :) Így szebb...
Ha space a szeparátor, erre az egészre nincs szükség (ekkor a space csak mező szeparátor lehet):
TOMB=( ${STRING} )
Innentől viszont szépen lehet iterálni a tömb elemein.
Hint: sima indexes iteráció visszafelé:
for x in $(seq 0 ${#TOMB[@]} | sort -nr); do
# Valami kod
done
- A hozzászóláshoz be kell jelentkezni
Szerintem így gyorsabb, és bővíthetőbb:
TMPFILE=`mktemp /tmp/almafa.XXXXXXXXXXXX` ( echo 'TOMB=(' echo $STRING | sed 's/"/\"' awk -F '#' '{ for (i=1;i!=NF;++i) { printf "\"%s\"\n", $i } }' echo ')' )> $TMPFILE . $TMPFILE rm $TMPFILE
illetve
for i in ${TOMB[@]} do echo $i done
- A hozzászóláshoz be kell jelentkezni
Először a második kódra reagálnék. Ez előre fele iterálás, én visszafele iterálást írtam direkt, mert a feladat vmi olyasmi, hogy nézzük meg, mi az utolsó amiben még van valami, ehhez visszafele iterálás kell nem pedig előre iterálás.
Az első kód: Az a sed túl azon hogy hibás de felesleges is, az awk script yól hangzik, ide akár integrálható is lenne az a sed, bár nem látom, mit akarsz vele elérni. Az awk script bevehető lenne egyetlen nagy $( ) jelek közé, és megúszható lenne a külön file használatának elkerülése, hiszen egy ilyen feladatért sztem felesleges.
- A hozzászóláshoz be kell jelentkezni
A másodkhoz:
visszafele (1-től tömbhosszig indexelve, vagy pedig 1-gyel elcsúsztatva kell ezt:)
for ((i=${#TOMB[@]}; i!=0; --i))
do
# $i felhasználása
done
A sed vagy tr ahhoz kell, hogy az idézőjeleket is kigyilkolja (simán csak általános kódot írtam :))
A tempfile most tényleg nem kell, akkor használtam így, amikor tényleg szükség volt az indexek meghatározására is az
awk-n belül. Az egyik progkör beadandó volt ilyen :D
- A hozzászóláshoz be kell jelentkezni
pl. sed-del.
dos/unix alatt is működő sed megoldás:
sed 's/^.* \([^ ].* [^ ].*\)/\1/g'
valamiért a dollárjelet nem szereti a végén a DOS-os verzió.
ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne
- A hozzászóláshoz be kell jelentkezni
pl. igy:
STRING="1 2 3 4 5 6 7 8"
set -- $STRING
ezutan $# tartalmazza azt, hany parametered volt.
$1 ... $n pedig egyenkent az ertekeket
- A hozzászóláshoz be kell jelentkezni
mindenkinek nagyon köszönöm, zseniálisak vagytok!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Nem akartam a kerdesemnek uj temat nyitni. Van egy olyan problemam, hogy van egy bemeneti fajl, ami kb. igy nez ki:
00001234 bla-bla
00003213 bla-bla
12332141 bla-bla
36363621 bla-bla
44444444 bla-bla
67867768 bla-bla
Az elso oszlop gyakorlatilag egy timestamp. Ebben kellene valahogy ugy greppelnem, hogy pl. a 21343001 es 45000000 intervallumot kellene kiiratnom.
awk /regexp/,/regexp/ - fele megoldasban gondolkodom, de azzal az a baj, hogy a kezdeti es vegso intervallum lehet olyan, ami nem szerepel egyaltalan a logban, tehat valahogy kellene trukkozni a regularis kifejezessel, h. valamire mindenkeppen matcheljen.
Ha volna valami hatekony otletetek erre, akkor azt megkoszonnem.
- A hozzászóláshoz be kell jelentkezni
awk '$1>=21343001 && $1<=45000000 {print $1 " " $2 }'
---
Mondjon le!
- A hozzászóláshoz be kell jelentkezni
koszonom, perfekt! :)
- A hozzászóláshoz be kell jelentkezni
Egyszerűbb:
awk '$1>=21343001 && $1<=45000000 {print }'
- A hozzászóláshoz be kell jelentkezni
Még egyszerűbb :-))
awk '$1>=21343001 && $1<=45000000'
Az awk default tevékenysége, hogy kiírja a feltételnek megfelelő sort.
- A hozzászóláshoz be kell jelentkezni
né, tényleg.
Én meg nagy ívben elkerülöm az awk-t, de azért valamennyire ismerem :) Az egy komplett programozási nyelv.
while read A B;
do
[[ $A -ge 1343001 && $A -le 45000000 ]] && echo $A $B
done < adat
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
(Számomra) Kölönös problémám van.
A lenti szkript hibat dob:
./db_backup.sh: line 5: date: command not found
./db_backup.sh: line 5: date: command not found
Az a kulönös, hogy a DATUM szeru sort sok szkriptben hasznalom, és ha nem függvénybe teszem akkor működik. De azért kell ide tennem, hogy valós legyen az indulási és befejezési idő is.
Ha a két db_backup meghívás elé teszem akkor is ez a hiba :(
De jobb szretném ha függvénybe menne. Egyébként lehet én bénázom el, mert ezt csak gyakorlás kép csinálom és tesztelgetek...
#!/bin/bash
function backupLog()
{
DATUM=`date '+%Y-%m-%d %H:%M:%S'`
echo "$1 db_backup $DATUM" >> $LOG
}
function db_backup()
{
$MYSQLDUMP -u $1 -p $2 --password=$3 > ${PATH}${DATE}_$1.sql 2>> $LOG
}
function savedCheck()
{
if test -f "${PATH}${DATE}_$1.sql"
then
echo "$1 save .......................................... OK!" >> $LOG
else
echo "ERROR: $1 db was not saved! " >> $LOG
fi
return
}
DATE=`date -I`
LOG="/var/log/db_backup.log"
PATH="/home/backup/database/"
MYSQLDUMP="/usr/bin/mysqldump"
DB1="db1name"
DB1_PASS="db1pass"
DB1_USER="db1user"
DB2="db2name"
DB2_PASS="db2pass"
DB2_USER="db2user"
# ---- MAIN Program ----
# ----- start log ------
backupLog Start
# ------- backup -------
db_backup $DB1_USER $DB1 $DB1_PASS
savedCheck $DB1
db_backup $DB2_USER $DB2 $DB2_PASS
savedCheck $DB2
# ------ end log -------
backupLog Stop
-
budacsik
- A hozzászóláshoz be kell jelentkezni
Ha előtte explicite beállítod a scriptben a PATH-t akkor is?
- A hozzászóláshoz be kell jelentkezni
Esetleg próbáld meg direkt path -al meghívni a fgv.-ben ( DATUM=`/bin/date ....` )
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
valami ilyesmi talan szebb lenne:
$(date '+%Y-%m-%d %H:%M:%S')
--
Unix, Perfectly "natural" after five or ten years.
- A hozzászóláshoz be kell jelentkezni
Szia Mindenki!
Szeretnék segítséget kérni:
Debian etch stable rendszeren futtatok egy ftp szervert. (vsftpd)
A kliens (csak egy van) a ./home/cnc/ könyvtárba pakol, azt látja olvassa írja.
Írtam egy shell scriptet, (jogosultságokat változtat biztonsági másol meg még pár dolog amit csinál)
A Problémám: Hogyan lehet megtanítani a rendszernek hogy, amikor bármi változás történik a fenti könyvtárban (fájlok törlése, írása, módosítása), akkor fusson le a scriptem.
Köszönöm az ötleteket, segítségeket előre is.
_________________________________
http://ro.4242.hu
http://ro.4242.hu/strong_lite
- A hozzászóláshoz be kell jelentkezni
Másik irányból: a vsftp-nek nincs ilyesmi 'plugin'-je? Hogy pl. logout-kor vagy file változáskor futtasson ezt v. azt? Lehet, hogy úgy könnyebb lenne.
A te irányodból:
http://linux.about.com/cs/linux101/g/fam.htm
http://www.linuxdevcenter.com/pub/a/linux/2004/12/16/fam.html
A tisztesség kedvéért hozzátenném, hogy sosem használtam még.
- A hozzászóláshoz be kell jelentkezni
ötlet, vázlatosan:
ls -l /könyvtárad > könyvtárad_lista.txt
majd
ls -l /könyvtárad > könyvtárad_lista_ell.txt
diff könyvtárad_lista.txt könyvtárad_lista_ell.txt
if [ `echo $?` -eq 0 ]
then
scripted
fi
mondjuk cronból fut a fenti ...
- A hozzászóláshoz be kell jelentkezni
Ha a jogosultság-változtatás szigorítást jelent, akkor vigyázz, mert egy támadó elkaphatja a feltöltés és a módosítás közti időpontot (ha nincs garantálva, hogy abban az időben nem férhet valaki hozzá a szerverhez).
- A hozzászóláshoz be kell jelentkezni
Módszer: A kliens kap egy könyvtárat, amibe írhat. Egy daemon figyeli a könyvtárat, hogy került-e bele fájl (creat()). Ha igen, akkor megnézi, ki írja a fájlt, majd open(), és meglepetésként unlink().
Amikor az, aki írja a fájlt kilép, akkor a még nyitott fájlt bemásolja egy másik könyvtárban létrehozott, a kliens által már nem látható fájlba.
De mielőtt megijednél a dologtól...: http://oss.sgi.com/projects/fam/
- A hozzászóláshoz be kell jelentkezni
Szia.
vsftpd-t nem ismerem, de pure-ftpdben van rá lehetőség, hogy a feltöltést követően lefusson egy script.
Üdv: Zoli
- A hozzászóláshoz be kell jelentkezni
> amikor bármi változás történik a fenti könyvtárban (fájlok törlése, írása, módosítása), akkor fusson le
- A hozzászóláshoz be kell jelentkezni
proftpd-t ismerem, az logol rendesen, minden fájl feltöltésekor, letöltésekor, stb. Létrehozok egy pipe-ot (lásd: mkfifo parancs), majd ráállítom a pipe-ra a log-ot.
Majd a scriptből:
while true; do
log="`head pipe_file -n 1'"
scripted, ami még felhasználhatja a $log értékét is
done
Előny: nem visz el felesleges proci időt, csak akkor indul, ha történt változás.
- A hozzászóláshoz be kell jelentkezni
Erre (is) valo az incron.
Bovebben lasd itt:
http://www.debian-administration.org/articles/581
- A hozzászóláshoz be kell jelentkezni
köszönöm a válaszokat, dnotify-val sikerült megoldanom.
_________________________________
http://ro.4242.hu
http://ro.4242.hu/strong_lite
- A hozzászóláshoz be kell jelentkezni
Sziasztok ismét!
Újabb kérdésem lenne:
Van-e arra valami hatékony módszer hogy bizonyos feltétel esetén egy script kicseréli egy fájl adott sorának adott karaktereit? Történetesen egy szövegfájl második sorának első öt karakterét. A fájl többi része, tartalma ne változzon.
Ismét köszi előre is a válaszokat :-)
_________________________________
http://ro.4242.hu
http://ro.4242.hu/strong_lite
- A hozzászóláshoz be kell jelentkezni
van: első sor kiírása, második kiírása + helyettesítés, minden egyéb sor kiírása. Mindez 3 sorban..
vagy pedig awk/sed script.
- A hozzászóláshoz be kell jelentkezni
sed '2s/^.\{5\}/valami/'
- A hozzászóláshoz be kell jelentkezni
Szerintem sokkal többet ér, ha csak rávezeted a megoldásra mint a felettedlévő hsz-ban is látható.
Abból is tudjuk, hogy Te tudod :) (subjective)
-
budacsik
- A hozzászóláshoz be kell jelentkezni
Nekem a kerdezo elozo kerdesebol nyilvanvalova valt, hogy o nem hazit akar megoldatni.
A sed meg rengeteget tud, es -bar a -e 's/.../.../g' funkciojat rengetegszer hasznalom, alig ismerem. Ugyanugy, ahogy a dc is sokat tud, az emberek megsem hasznaljak ki a tudasanak toredeket sem.
Nem art, ha van ilyen pelda is a HUP-on. Szerintem.
(No offence.)
----
Sooner or later you had to talk, even if it was only because you'd run out of things to throw. - Pratchett
honlap készítés
- A hozzászóláshoz be kell jelentkezni
Nem azért írtam hogy ti tudjátok hogy én tudom, hanem hogy lásson sed használatra példát, ami didaktikailag szintén szükséges.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Van egy text file-om, aminek a sorai ilyen szerkezetűek:
57,344 B 2006.02.18 05:18:03 /data/x/y/valamifile.dat 2016.02.16 Valtozo hosszusagu description RetInit:STARTED ObjHeld:NO
Ebben a 7. mezőtől (mezőelválasztó default egy vagy több szóköz vagy tab) kezdődik egy változó hosszúságú description mező, ami a RetInit szóig tart (pontosabban ez előtte levő whitespace-ig). Ezt a description-t szeretném egy változóba kinyerni.
Van erre valami ötletetek?
Köszi!
roadrunner
- A hozzászóláshoz be kell jelentkezni
Ezekre gondoltal?
1. V=$(sed -re 's/^([^ \t]+[ \t]+){6,6}(.*)RetInit.*$/\2/') ; echo $V
2. V=$(sed -re 's/^([^ \t]+[ \t]+){6,6}(.*)[ \t]+RetInit.*$/\2/') ; echo $V
Az elsonel benne lesz a RetInit elotti whitespace is, a masodiknal nem.
- A hozzászóláshoz be kell jelentkezni
Első kör: az elejét lecsapni (cut (7-nagyonsokig, bár ez randa), utána meg (ha a "RetInit:"-et nem tartalmazza a description) a "RetInit:.*$" cseréje a nagy büdös semmire.
Második nekiugrásból awk-ban csinálnék ciklust 7-től a "RetInit:"-re maccsoló mezőig vagy NF-ig, a ciklusmagban printf az i-edi mező tartalma plusz egy space, a ciklus végén meg egy soremelést kinyomni.
Vagy sed-del bűvészkedés :-P
- A hozzászóláshoz be kell jelentkezni
sed -e's/RetInit.*$//' filenev | awk '{$1 = $2 = $3 = $4 = $5 = $6 = ""; print}'
vagy
awk '{$1 = $2 = $3 = $4 = $5 = $6 = ""; print}' filenev | awk -F"RetInit" '{print $1}'
- A hozzászóláshoz be kell jelentkezni
awk '
{
for (i=7; i<=NF && ( $i !~ /RetInt:/ ) ; i++) {
printf "%s ", $i;
}
printf "\n";}
'
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek! zeller és pme megoldása is működik :)
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Nemrég kezdtem awk-t nézegetni (példákon keresztül) és nem tudom megérteni, hogyan és mikor lesz vége egy scriptnek (pl hogyan jut el az END-ig, amit ugye egyszer hajt végre, a legvégén).
Például van egy ilyen kódrészletem, hogy:
awk 'BEGIN {c=7}
{
for (i=0;i<4;++i)
{
print "abcdef"
}
}
END {print "ghijk"}
hogyan juthatok el itt a script legvégére, azon kívül, hogy ctrl+d?
előre is köszi a segítséget (és elnézést ha butaságot kérdeztem)!
- A hozzászóláshoz be kell jelentkezni
Az awk script minta - tevékenység párokból áll össze, az adott mintára illeszkedő bemenő soron végrehajtja a mintánál szereplő tevékenységet. A "BEGIN" speciális mintánál megadott tevékenységet az első beérkező sor feldolgozásaelőtt, az "END" speciális mintánál szereplőt az utolsó beérkezett sor feldolgozása után végzi el.
Fentiekből egyenesen következik, hogy az "END" mintához tartozó tevékenységet akkor fogja végrehajtani, ha az input utolsó sora is feldolgozásra került, azaz a fájlt végigolvasta. Ha az input a standard bemenet, akkor ott a ctrl+D jelzi a bemenet végét.
RTM: http://www.computer-books.us/awk_4.php illetve Dale Dougherty: Sed & awk című könyve (O'reilly, Sebastopol, több kiadás) is nagyon hasznos olvasmány.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Kellene nekem egy kis segítség egy egyszerű shell script megírásához. Próbáltam magamtól de sajna nem ismerem ezt a nyelvet így nem igazán akar összejönni.
A lényeg annyi lenne:
Hogy van 2 fájlunk, egy letolt.sh és egy ido.
Na már a letolt.sh be van rakva a munkamenetek közzé így minden induláskor lefut. Én viszont azt szeretném ha egy nap csak egyszer futna le. Majd mentse el a dátumot az ido fájlba. Újabb indításkor pedig ellenőrizze, hogy a dátum egyezik-e a maival ha igen akkor álljon le, ha nem akkor folytassa a fájlt. Próbálom leírni az algoritmusát, hátha abból jobban érthető:
a letolt.sh tartalma:
Visszaolvassa az ido fájlból a dátumot;
Ha ido_fajlbol_kiolvasott_datum = mai_datum
{
lépjen ki
}
ellenkező esetben
{
itt fog lefutni egy parancs
mentse el az aktuális dátumot az ido fájlba
}
Remélem érhető és tudtok segíteni.
- A hozzászóláshoz be kell jelentkezni
crontabban naponta lefutók közé vedd fel. Tutira lefut + naponta csak 1x.
- A hozzászóláshoz be kell jelentkezni
Régebben nézegettem. De azt nem csak úgy lehet, hogy bizonyos időbe fusson le, pl.: 14:00kor? Mert az nem lenne jó. Nekem olyan kéne ami lefut mindennap egyszer, akár reggel 4kor akár este 23kor.
- A hozzászóláshoz be kell jelentkezni
Egy lehetseges megoldas...
if [ "$(head -n 1 ido)" = "$(date "+%Y%m%d")" ]
then
exit
else
date "+%Y%m%d" >ido
fi
--
maszili
- A hozzászóláshoz be kell jelentkezni
Köszi szépen! Tökéletes! ;)
- A hozzászóláshoz be kell jelentkezni
Üdv a következő biztonsági mentés szkriptet agyaltam ki:
I. mentés készítés az aktuális dátummal a /home/mentes könyvtárba (tar -jcvf /home/mentes/aktuálsi_dátum+'-1'+.tar.gz /public)
A.
Ha monden OK.
1. USB kulcs formázás/törlés
2. USB kulcsra átmásolás a /home/mentes/aktuális_dátum.tar.gz -t
B.
Ha nem sikerül a mentés
1. aktuális dátum -1 nap kivételével az összes /home/mentes/ mappában található fájlok törlése
2. go to I. (talán végtelen ciklus gyanús)
A script corontabbal lenne lefuttatva naponta.
Idő/dátum szinkrnizálás neten keresztül menne.
valami méretkorlát is kellene pl 4GB
kb ennyi...
valami észrevételetek van e? biztonságos? megvalósítható? további javaslatok? lehetséges hibák?
vagy van valakinek hasonló erre a célra felhasználható megbízható szkriptje?
üdv xilu
- A hozzászóláshoz be kell jelentkezni
Persze, hogy megvalosithato
Szerintem igen sokan hasznalnak hasonlot.Bar szerintem a USB kulcsos megoldas egy kicsit rizikos. Mivel ha az usb kulcs tularamot kap ez alaplapon keresztul akkor bukta az egesz menetes.
Szeritem a jo megoldas a CD/DVD megoldas vagy dat kazis.
Az egesz kb 10-15 sorbol megolhato...
Kezd el irogatni es ha elakadsz akkor biztos segitunk neked.
- A hozzászóláshoz be kell jelentkezni
van egy screenshotolt szkript, de más szellemi tulajdonát végső esetben használnám...
ha már az én szellemi tudásom nem elég :D
amugy valóban DVD lenne a legjobb, de a rendszer adott
de kliens gépekről valóban nem árt heti/havi DVD mentés...
a fentiek alapján a szkriptírás folyamtaban... tesztelés lesz húzós... és időigényes
nem vagyok programozo, de javabol átmentem 2esel :P ha van valami írok néktek!
üdv xilu
- A hozzászóláshoz be kell jelentkezni
Ha mar javaban programozol akkor egy ilyen script ossze kalapalasa nem lehet tobb min 10 perc.
Varjuk az eredemenyeket.
De csere alapert ossze dobok neked egy ilyet par perc alatt! ( sor, tabla csoki, stb stb)
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
MENTES=/home/backup/backup_$(date +%Y%m%d).tar.gz
MENTENDO="/public/"
echo "mentés folyamatban $MENTENDO -ből $MENTES -be"
tar -jcvf $MENTES $MENTENDO
if [ $? == 0 || > 4GB ]; then
echo "A következo fajl:"
echo $MENTES
echo " A "
echo $MENTENDO
echo " allomanybol készult"
else
echo "Problema lepett fel a kovetkezo:"
echo $MENTES
echo " fajl mentese soran ami a: "
echo $MENTENDO
echo "fajlt mentene"
(finish)
onmagaban a mento script:
egy kérdés hogy állomány méretet hogyan mivel tudok megvizsgálni?
if [ $? == 0 || > 4GB ]; then >>> 4 GB miatt nem fut le, de szintaktikailag helyes :D
erre épülne rá a kiirás USBre vagy épp /home/backup ürítés...
ma ennyire futotta...
- A hozzászóláshoz be kell jelentkezni
if [ $? == 0 || > 4GB ];
Helyesnek azert helyes mivel $? a tar vegeredmenyet vizsgalja ami ha sikerul akkor egy 0 erteket ad vissza. Viszont a >4GB azt nem igy kene vizsgalni. Gondolom a file meretere vagy kivancsi ;)
A file meretet a kovetkezo kifejezessel tudod kiiratni/vizsgalni:
ls -l $MENTES|awk'{print $5}' es ezt mar bekerulhet az if-be ;)
Meg szerintem a || jel helyett && jel kell
Bar en kulon if-ben vizsgalnam ;)
- A hozzászóláshoz be kell jelentkezni
[ $(ls -l ${MENTES} | cut -d\ -f5) -lt 4294960000 ]
- A hozzászóláshoz be kell jelentkezni
;)
Ez is egy megoldas ;)
- A hozzászóláshoz be kell jelentkezni
Itt ugye egy cut indul az awk helyett, ráadásul a gawk-s megoldást minek if-be rakni? Van néki szép, egészséges exit statement-je: http://www.gnu.org/manual/gawk/html_node/Exit-Statement.html, azaz awk ... && foo illetve awk ... || foo is használható -- egy test hívás megspórolva.
- A hozzászóláshoz be kell jelentkezni
Na ez hirtelen nem is jutott az eszembe ;)
/A megporol attol fugg mit szeretne elerni a scriptel ;)/
- A hozzászóláshoz be kell jelentkezni
stat -c %s foo.bar
t
- A hozzászóláshoz be kell jelentkezni
Köszi a kiegészítést, hirtelen nem ugrott be, hogy van ilyen...
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
mkisofs -r /home/public/ > /home/mentes/backup_$(date +%Y%m%d).iso
cdrecord -v speed=12 dev=0,0,0 blank=fast -data backup_$(date +%Y%m%d).iso
rm backup_$(date +%Y%m%d-3).iso
finish
crontab azt kész...
csak még tesztelni köll azt ha nem megy valami jelentkezem :P
- A hozzászóláshoz be kell jelentkezni
Bar ez nem usb kulcs mento scritp ;) de varjuk a fejlemenyeket.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Van egy nagyméretű (~300 MB) text fájl, ami fájlokról tartalmaz infókat, többek között a fájlok nevét is. Egy szkript egy ellenőrzés során ebben a listában nézné meg, hogy az adott fájlnév szerepel-e. A méret miatt a grep már elég lassú, és elég erőforráspazarló megoldás, mivel az minden keresés alkalmával a teljes fájlt át kell nézie.
Igazából csak annyira van szükség, hogy megmondja, a fájl szerepel-e a listában, vagy nem (találatok száma, stb. nem érdekes).
Mi lenne a leghatékonyabb (és legkönnyebben kivitelezhető) megoldás a keresés meggyorsítására? Betölteni valamilyen adatbázisba, ahol lehet indexelni adott mezőre, és SQL select-tel lekérdezni, vagy a rendezett listában (sort-tal is megoldható) C program segítéségvel keresni (biztos van rá kész megoldás)??
- A hozzászóláshoz be kell jelentkezni
En biztos betennem SQL ala, a RDBMS-eket pont erre talaltak fel. De te nem en vagy.
Szoval, a legjobb megildas az RDBMS, mert az pont ilyenekre van kitalalva, optimalva, hogy keressen.
Ha ez valamiert nem kivitelezheto, akkor a C program jo megoldas, csak nem sokkal lesz gyorsabb az egesz, mert ugyanugy maszkalnod kell a fajlban, es ha a fajlnev nem ad tampontot a db-ben elfoglalt helyere, akkor gyak. ugyanott vagy, mint greppel.
Amit meg esetleg lehet tenni, hogy vagy a fajl valtozasara tett triggerrel, vagy a fajl meretet pollozva erzekelni a fajl modositasat, es olyankor automatikusan kigeneralni a fajlneveket egy kulon gyorscache-ba. Ez azert hatekonyabb a grep-nel, mert nincs koltseges regex matching (az osszes fajlnevet szeretnenk), igy kevesebb ido alatt megy ki a cucc.
Ez utobbi modszer azt feltetelezi, hogy a fajlod igen hasonlo egy CSV fajlhoz, vagyis hogy egy tablazat, amiben vannak oszlopok (mezok), es vannak sorok, a mezok kozt meg mezoszeparator karakterek. Ha nem, es valami emberi olvasasra szant cuccbol kell kiszedegetni a fajlinfokat, az eleg ciki, es raadasul ez a modszer sem a legjobb.
Ami az SQL megoldast illeti: Ha ez a fajl dinamikusan valtozik, es de szabott formatumu, akkor erdemes a logfajlbol pipe-t csinalni, es egy kis C daemonkat irni, ami a pipe-n figyel, ha van aktivitas, akkor bekuldi a SQL-be.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Hatha eleg a: grep -F -q
Egy probat meger.
Ha nem eleg akkor pl. sqlite3
- A hozzászóláshoz be kell jelentkezni
Első körben kipróbálom a grep -Fq -t, (hasonló kapcsolót kerestem - csak nem a quiet opciónál):
"-q (...) Exit immediately with zero status if any match is found"
Ha így is lassú, akkor SQL.
Köszi!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
A következő problémám van:
Adott egy UTF-8-es kódolású text fájl amibe html Unicode-os decimális karakterek is vannak pl:
#&945;
Tudja valaki, hogyan lehetne ezeket valódi UTF-8-as karakterekre cserélni?
- A hozzászóláshoz be kell jelentkezni
"Recodes the HTML file using a new character set, while losing no characters at all. You can recode shift_jis to euc-jp, utf8 to latin1, iso-8859-15 to GB18030, iso-2022-jp to koi8-r etc if you wish, and none of the characters on the page will become unreadable (unless you specify -l switch, which disables making &#nnnn; escapes)."
- A hozzászóláshoz be kell jelentkezni
Köszönöm de ez nem jött össze :-(
Biztos, jó lenne ha sikerülne leforgatnom de az 1.3 és az 1.2-est se sikerült.
- A hozzászóláshoz be kell jelentkezni
Ahogy nézem, semmi trükkje nincs: "./configure ; make", és kész is van.
- A hozzászóláshoz be kell jelentkezni
Ez igaz csak: make error.
- A hozzászóláshoz be kell jelentkezni
Kicsit kínlódás, de pár perc alatt megvan: sed-del cseréld ki az összes előfordulást. Szerintem hamarabb végzel, mintha célszoftvert keresel hozzá. Lesz egy szép hosszú sorod, amivel utána bármit át tudsz kovertálni.
(Ha kell segítünk a sed használatában. Illetve pár perc, ha elküldöd a fájlt megírom neked.)
- A hozzászóláshoz be kell jelentkezni
Köszi, valami ilyesmire gondoltam először is inkább, ezért írtam ide :-). De van egy kis problémám:
az OS ISO8859-2 kódolást használ és fenti alfát takaró html kódot így jeleníti meg: Îą.
Elég macerásnak tünik így írni scriptet, arabtól - görögig sokminden van a fájlokban, és két napom rámenne mire elöállítanám a megfeleltetéseket. Ehelyett inkább az jutott eszembe, hogy hexában vagy oktában kellene megoldani a problémát. Pl: od-vel txt fájllá alakítani az adatokat, majd sed-del azt megszerkeszteni, majd visszaalakítani. Ez az elképzelésem nagyjából ott bukott meg eddig, hogy akárhogy próbálkozom nem tudom visszaalakítani normálisan a fájlokat.
- A hozzászóláshoz be kell jelentkezni
Erre, ha nincs célprogram, inkább programot írnék vmi normális programnyelven, nem vacakolnék shell scripttel (ami ráadásul lassú lesz).
- A hozzászóláshoz be kell jelentkezni
Esetleg miért nem használod a recode -ot?
- A hozzászóláshoz be kell jelentkezni
Végül ez lett.
Kicsit féltem tőle mert nem értek a programozáshoz de 2 óra alatt összehoztam C-ben és a Postgre olvassa is rendesen. Már csak a megfeleltetési táblára van szűkségem, amihez az adatokat már le is töltöttem. Annyi kérdésem lenne még, hogy szerintetek milyen módszerrel keressem ki az összetartozó adatokat. Vagyis a programom ad egy sztinget amiben a html kód van, majd a megfelelő helyre beilleszti ennek a UTF-8 decimális értékéből kialakított karaktert. Pl:
945 -> 206 177
Ti milyen formátumban tárolnátok a megfeleltetéseket? Pl. CSV fájlban amit beolvasok? Ha igen akkor soronként olvassam be amíg nincs meg a html kód? Vagy egyszerre töltsem be a memóriába? Vagy ne külső fájlként legyen definiálva? Stb. A cél az lenne, hogy minél gyorsabban megtalálja a program a megfelelő decimális kódot.
- A hozzászóláshoz be kell jelentkezni
A török karakterekben nem tudunk segíteni. Ha valamilyen segédprogrammal csak az a gond, hogy iso 8859-2 kódolás az eredménye, és utf8 kellene, akkor használd az iconv parancsot.
- A hozzászóláshoz be kell jelentkezni
Sajnos eddig még egyáltalán nem találtam semmilyen segédprogramot erre a célra.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Van egy pici script, ami percenként lefut a cron által,
azt kellene megcsinálni, hogy az eredmény ne külön egyperces fálj-ok legyenek, hanem 5 perces bontásban készüljenek a fájlok, de a letöltés wget-el mindenképp percenként kellene.
itt amit eddig fabrikáltam,
#!/bin/bash
filename="$(date +%F_%H-%M).txt"
cd /home/user/adatok/
wget http://www.valahol.hu/egyeb/adat.txt
mv /home/user/adatok/adat.cgi /home/user/adatok/$filename
Tehát percenként szedje le a megadott állományt, de ne percenkénti állományokat
hozzon létre, hanem ötperces egyesítéseket csináljon.
Most egy könyvtárba teszi az összes fájlt, ilyen nevekkel:
2008-08-06_01-35.txt, 2008-08-06_01-36.txt, 2008-08-06_01-37.txt, ...
Amit még jó lenne, ha abban a formában pakolná le a fájlokat, hogy
külön kövtárat hozzon létre a dátumoknak, méghozzá egymásba ágyazva,
tehát pl:
-2008
-Augusztus
-06
és itt lehetne a fájlok neve az óra, perc formátum, de ugye 5 percesekké kellene
olvasztani a perceseket.
Ha valaki leírná hogyan kell, nagyon örülnék.
Köszi
- A hozzászóláshoz be kell jelentkezni
Fájlnévbe a kreálásának %s-sel kapott timestamp-je. Az utolsó fájlod az ls -rt|tail -1.
MOST=$(date +%s)
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f1)) -lt 300 ]
then
hozzáfűz
else
új fájlt csinál
fi
- A hozzászóláshoz be kell jelentkezni
Köszi, egy kis részét értem, de még nem teljesen tiszta, hogyan is kellene tennem.
Meghagyom az eredeti scriptemet egypercenként lefutni (persze hozzáírva a fájlnévhez az %s -t). és amit írtál, az egy újabb script része lenne,
vagy pedig egy script lenne, ami percenként lefut, és ~mindent elintéz?
bármelyik esetén vannak homályos pontok bennem :(
ha le tudnád írni, hogy is kéne alkalmaznom az amit írtál, hogy jól működjön
amit szeretnék, az nagy segítség lenne.
Köszönöm
- A hozzászóláshoz be kell jelentkezni
Nem intéz el mindent. A fájlnévbe valahogy varrd bele date +%s kimenetét, majd az "ls -lt | tail -1" -ből ezt vágd ki, mondjuk cut-tal. Ebből, meg az aktuális timestamp-ből ki lehet találni, hogy 300 másodpercnél régebbi-e a fál. Ha nem, akkor abba köll beletolni az adatokat, ha igen, akkor új fájlt kell írni.
A fájlok könyvtárakba szervezése, megtöltése, egyebek megoldása a te dolgod, amit én írtam, az csak egy módszer arra, hogy hogyan lehet egyszerűen matekozni időbélyeggel.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, a segítséget!!! majd kiderül boldogulok e a továbbiakban.
- A hozzászóláshoz be kell jelentkezni
Háát, egyenlőre itt tartok, nem tudom, hogyan tovább.
gondolom hiányol egy ")" zárójelet a feltételből, az hova kellene?
meg amúgy jó lehet ez?
ez a script:
#!/bin/bash
filename="$(date +%F_%H-%M.%s)"
uccso=$(ls -rt | tail -1)
cd /home/user/data/
#
#
#
MOST=$(date +%s)
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f2)) -lt 300 ]
then
wget -O - -q http://10.0.0.1/data/data.txt >> $uccso
else
wget -O - -q http://10.0.0.1/data/data.txt >> $filename
fi
és ez a hibaüzenet:
./get-: line 11: unexpected EOF while looking for matching `)'
./get-: line 18: syntax error: unexpected end of file
ja, még annyi, hogy arra figyeltem, hogy az utoljára írt fájl mindenképpen
az én data.txt vagyis inkább 2008-08-06_20-04.1218045896 nevű fájlom legyen
Köszi
- A hozzászóláshoz be kell jelentkezni
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f2)) -lt 300 ]
Itt 1-el tobb zarojelet nyitsz meg.
----
I have a solaris box that does nothing.. its pretty good at it aswell. - besok, deviantart
honlapkészítés
- A hozzászóláshoz be kell jelentkezni
Már kipróbáltam így:
if [ $(${MOST}-$(ls -rt| tail -1 | cut -d. -f2)) -lt 300 ]
eredmény:
line 11: 1218050087-1218050079: command not found
line 11: [: -lt: unary operator expected
és így:
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f2)) -lt 300) ]
ebből ez lett:
command substitution: line 11: syntax error near unexpected token `-lt'
command substitution: line 11: `(${MOST}-$(ls -rt| tail -1 | cut -d. -f2)) -lt 300'
nem tudom mi lenne a helyes feltételsor.
Köszi
- A hozzászóláshoz be kell jelentkezni
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f2))) -lt 300 ]
- A hozzászóláshoz be kell jelentkezni
percenkent futtatod:
wget -O- http://eztetet >>ebbebele
minden otodik percben:
mv ebbebele idobelyegesfilename
- A hozzászóláshoz be kell jelentkezni
Hát köszönöm szépen a segítségeket!
pme megoldása ugyan a legegyszereűbb, de hogy egy script-en belül tudjak maradni,
egyenlőre a másikat használom, de remekül működik.
Köszi még1x mindenkinek!
ui, ha nem találom meg a kövytárbapakolást (dátumos könyvtárak), kénytelen
leszek megint itt kunyizni :)
- A hozzászóláshoz be kell jelentkezni
if nélkül:
DIR="$( date +'%Y/%B/%d' )"
FILE="$(date +'%H:')$(( $(date +'%M')/5*5 ))"
mkdir -p "$DIR"
wget ... >> "$DIR/$FILE"
szaszi
- A hozzászóláshoz be kell jelentkezni
hmm, ha jól próbálom értelmezni, ez megoldja az 5 perces illetve a könyvtár kérdést is!?!?
- A hozzászóláshoz be kell jelentkezni
Mér' ne maradhatnál egy scripten belul: parancssori parametertol fuggoen csinalja az "otperces" melot, avagy csinalsz a scriptre egy softlink-et es hivott nev szerint elagazol.
- A hozzászóláshoz be kell jelentkezni
Szaszi, köszi, nemsokára kipróbálom.
Viszont az előzőekkel van egy kis gondom, úgy néz ki, hiába a 300 as szám
a végén, ami gondolom az 5 perc az 300 másodpercből jön, mégis 2 percenként hozza
létre a fájlokat:
2008-08-07_10-34.1218098041
2008-08-07_10-36.1218098161
2008-08-07_10-38.1218098281
2008-08-07_10-40.1218098401
2008-08-07_10-42.1218098521
2008-08-07_10-44.1218098641
2008-08-07_10-46.1218098761
2008-08-07_10-48.1218098881
2008-08-07_10-50.1218099002
2008-08-07_10-52.1218099121
na, ez vajon miért van???
az eddigi script:
#!/bin/bash
filename="$(date +%F_%H-%M.%s)"
uccso=$(ls -rt | tail -1)
cd /home/user/adatok/
MOST=$(date +%s)
if [ $((${MOST}-$(ls -rt| tail -1 | cut -d. -f2))) -lt 300 ]
then
wget -O - -q http://10.0.0.1/data/data.txt >> $uccso
else
wget -O - -q http://10.0.0.1/data/data.txt >> $filename
fi
- A hozzászóláshoz be kell jelentkezni
Nagyon dolgozol:)
crontab:
1 * * * * enyemscript 0
5 * * * * enyemscript 1
enyemscript:
if [ $1 == 1 ]
then
# mkdir -p ha kell
mv /tmp/tempfile /ittlegyen/`date +%s`.txt
else
wget -O- -q http .... >>/tmp/tempfile
fi
A /tmp tartalma _altalaban_ torlodik boot-nal.
- A hozzászóláshoz be kell jelentkezni
Hát még1x nagyon kösz mindenkinek a jó ötleteket, megoldásokat.
úgy tűnik, most szaszié fut, thx
- A hozzászóláshoz be kell jelentkezni
hát, már totál nem vágom,
ha futtatom kézzel, teszi a dolgát rendesen, ha a crontabba teszem, semmi,
de ha az előző IF es megoldást teszem a crontabba, az fut rendesen percenkent.
#!/bin/bash
konyvtar="$( date +'%Y/%B/%d' )"
fajl="$(date +'%H:')$(( $(date +'%M')/5*5 ))"
mkdir -p "$konyvtar"
wget -O - -q http://10.0.0.1/data/data.txt >> "$konyvtar/$fajl"
???????????????????????????????????????
HMM érdekes, fél óra múlva ismét ránéztem, látom, a var log syslog ban ott vannak
a cron logok, percenként, mondom mi a fenéért nem megy, erre meg már ott vannak
a fájlok, 5 perces nevekkel.
na mind1, most talány tényleg megy. thx
- A hozzászóláshoz be kell jelentkezni
Igyekszem az utolsót kérdezni...
most ez ugye a fájlnév előállítására használt képlet:
fajl="$(date +'%Hh')$(( $(date +'%M')/5*5 ))m"
ezzel még egy pici bajom van, hogyan kell megoldani, hogy a perceknél
ha pl 14 óra 5 perc van, ne 14h5m legyen a fájlnév, hanem 14h05m
köszi
- A hozzászóláshoz be kell jelentkezni
Vagy berakod egy valtozoba es ha csak egy szamjegyu eleteszel egy nullat:
[ ${#m} -lt 2 ] && m="0${m}"
vagy printf-et hasznalsz:
printf "%02dm" $(( $(date +%M)/5*5 ))
- A hozzászóláshoz be kell jelentkezni
Arra kell még vigyázni, hogy a $(date +%M) lehet '09' is, amit oktálisan szeretne értelmezni, de nem tud..
$(((1$(date +%M))/5*5-100))
- A hozzászóláshoz be kell jelentkezni
Hát asszem, visszatérő vendég leszek :(
Ha ez így működött:
#!/bin/bash
cd /home/komi/IP_Accounting/$konyvtar/
more $(ls -rt | tail -1) | awk '{sum[$2]+=$3} END {for (name in sum) print name, sum[name] }' | grep doboz | awk '{print $2}' > /home/user/data/szamol/doboz$(date +%F_)$fajl
létrehozott egy doboz+dátumidő fált, amiben a másik könyvtárban az utolsó létrehozott fájlban összeadta a harmadik oszlop értékeit, ott ahol a második oszlopban doboz szó szerepelt
tehát ha a fájlban ez volt pl.:
kocsi doboz 32
talicska doboz 8
doboz talicska 1
akkor a fájlban amit létrehozott, a 32+8 tehát 40 szerepelt, ez jól is ment ahogy néztem.
aztán jött, hogy ha eddig ok, akkor mehetnek az adatok mysql be.
#!/bin/bash
mikor="2008-08-07-16-55"
osszeg="36541"
mysql -u get -pget --host localhost -e"use get; insert into doboz values ('$mikor', '$osszeg');"
na ez egy próba volt, ez is jóóól ment, szépen betette a kívánt táblába a két változót
de amit élesbe csináltam, ott nem megy valami, a $mikor-t beteszi, de az $osszeg már üres marad
így próbáltam:
#!/bin/bash
konyvtar="$( date +'%Y/%B/%d' )"
fajl="$(date +'%Hh')$(( $(date +'%M')/5*5 ))m"
mkdir -p "$konyvtar"
wget -O - -q http://10.0.0.1/data/data.txt >> "/home/user/data/$konyvtar/$fajl"
cd /home/user/data/$konyvtar/
mikor="$( date +%F_)$fajl"
doboz=$(ls -rt | tail -1) | awk '{sum[$2]+=$3} END {for (name in sum) print name, sum[name] }' | grep 10.231.123.101 | awk '{print $2}'
mysql -u get -pget --host localhost -e"use get; insert into doboz values ('$mikor', '$osszeg');"
Miért nem megy vajon, nekem úgy tűnik, hogy ha a próbában ment, akkor itt is kéne, ami eltérés van, az az awk -s
számoló sor, először ugye ezzel csináltam:
more $(ls -rt | tail -1) | awk '{sum[$2]+=$3} END {for (name in sum) print name, sum[name] }' | grep doboz | awk '{print $2}' > /home/user/data/szamol/doboz$(date +%F_)$fajl
az adatbázisosnál így próbáltam:
doboz=$(ls -rt | tail -1) | awk '{sum[$2]+=$3} END {for (name in sum) print name, sum[name] }' | grep 10.231.123.101 | awk '{print $2}'
az már meg sem merem említeni, hogy ha az öt perces adatok bent vannak a mysql -ben, utána a letöltött txt-ket
tömörytenem kéne :S
meg, hogy mi van ezzel az oktális 9 -es problémával, meg hogy hogyan oldjam meg, hogy a mysql be
ha percenként próbál írni egy értéket, de ugyanazzal az idődátummal (ugye az 5 perces), és az időtáum a kulcs,
ezt hogy kéne megoldani.
pff. nehéz ügy ez (nekem) ha valaki tud segíteni még, mert innen nem megy megint...
- A hozzászóláshoz be kell jelentkezni
Komolyabb dolgokra bash kenyelmetlen, ugyhogy en pythonnal vagy mas szkriptnyelvvel probalkoznek.
- A hozzászóláshoz be kell jelentkezni
Koszi a tanácsot, biztos igazad van, csak azt gondoltam megy ez bash ból is :(
Igazából ez a script csak feltölti adatokkal a mysql táblát, mást nem kell vele
tennie, csak ugye az adatokat le kell tölteni, meg megcsámcsogni kicsit.
DDDDE, közben mondom, kipróbálom, hogy beteszem a more parancsot a sorba, és így már nem üresek lesznek a mezők, van értékük.
ez van most:
[code]
doboz=$(more $(ls -rt | tail -1) | awk '{sum[$2]+=$3} END {for (name in sum) print name, sum[name] }' | grep doboz | awk '{print $2}')
még az az oktális dolog meg az, hogy ha simán futtatom 5 percen belül kétszer a scriptet, akkor duplicate entry key-t mond a mysql, ezeket kéne kiküszöbölni,
és akkor ennyi lenne a történet bash script oldali vége.
- A hozzászóláshoz be kell jelentkezni
Két egymást követő date sem biztos, hogy ugyanazt a dátumot adja.
Az oktális számok ellen pedig a bc-t ajánlom:
a=$(echo 09/5*5 | bc)
- A hozzászóláshoz be kell jelentkezni
Most látom, hogy lehagytam a szimplaidézőjelet az echo után, mert ha van egy 09 könyvtár, és benne egy 5a5 nevű file, akkor máris syntax error.
Ismét egy elrettentő példa arra, hogy a bash nem gyerekeknek való.
- A hozzászóláshoz be kell jelentkezni
Borzasztó. Mármint a "more foo | awk 'boo' | grep moo". Szépen, az eszközöket értelmesen használva ez valahogy úgy néz ki, hogy awk '/moo/ boo' < foo. Ráadásul a 2. awk is kihajítható, ha az elsőben csak a szummát írod ki...
- A hozzászóláshoz be kell jelentkezni
Hát tudom, hogy nem szép, nem elegáns, nem átlátható, stb.
de most kezdtem ismerkedni ezzel a dologgal, és hát ez tanulás vagy inkább
próbálgatás közben született.
Egyébként köszi, igazad van, feleslegesen iratom ki, utána meg nem kell :)
hehe, közben rájöttem, miért nem felel meg nekem (legalábbis abban a formában, ahogy gondolom), ha az awk printnél csak a szummát írja ki, mert akkor nem tudom, milyen adathoz tartozott a szumma
nyers fájl a pédában:
alma doboz 35
banán doboz 52
doboz auto 14
kukorica doboz 8
na ebből a fájból kell összeszedni, hogy mennyi volt az összeg ott ahol a doboz
a második oszlopban szerepel, és mennyi ott, ahol az elsőben (nem csak a doboz kell, a többit is futtattam új sorban)
- A hozzászóláshoz be kell jelentkezni
enyemscript:
if [ $1 == 1 ]
then
# mkdir -p ha kell
fn=`date +%s`.txt
mv /tmp/tempfile /ittlegyen/$fn
# ide jon a "doboz", de nagyon nem ertem mit kell itt csinalnod
# a letoltott file tartalma fontos lenne
# kb. igy
awk '/minta/ {micsinal}' $fn | mysql parameterek
gzip /ittlegyen/$fn
else
wget -O- -q http .... >>/tmp/tempfile
fi
- A hozzászóláshoz be kell jelentkezni
Végülis úgy tűnik, kicsit átalakult a módszer, pme féle dolgot próbálom kb.
(Tudom, már nincs könyvtárakban a dátum, de úgy döntöttem minek, ha a lényegi
adatok úgyis adatbázisban lesznek, a nyers fájloknak meg mindegy, csak
ritkán kerülhetnének elő)
most ez van egyenlőre, ez ha már van 5 egyperces fájl, akkor onnan úgy tűnik
jól megy, egyenlőre csak percenként letöltöm, ötpercenként összevonom.
Úgy próbálom alakítani, hogy az ötperces fázisban már nem simán összevonom
a fájlokat, hanem megpróbálom egyből kinyerni, összegezni az adatokat és
egyből beküldeni a mysql -nek, illetve ezután a forrás 5 db egyperces fájlt
be szeretném tömöríteni.
[code]
crontab:
*/1 * * * * /home/data/perc
*/5 * * * * /home/data/otperc
perc:
#!/bin/bash
DIR="/home/data/adatok/perces"
FILE="$(date +'%F_%H-%M')"
wget -O - -q http://10.0.0.1/data/data.txt > "$DIR/$FILE"
otperc:
#!/bin/bash
sleep 30
FROMDIR="/home/data/adatok/perces"
TODIR="/home/data/adatok/otperces"
FILE="$(date +'%F_%H-%M')"
LASTFIVE=$(ls /home/accounting/adatok/perces/ -rt | tail -5)
cd $FROMDIR
cat $LASTFIVE > $TODIR/$FILE
majd "blog"-olok tovább, addig is köszi, és ha nagyon gáz amit írtam,
jószívvel fogadom a javítást, hátha majd egyszer tanulok belőle. Köszi
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Kitaláltam, hogy írok egy egyzserű kis szkriptet, ami annyit csinál, hogy mikor rákattintok egy avi-ra, akkor megvizsgálja, hogy van-e az adott könyvtárban a film nevével megegyezző nevű feliratfájl (sub, srt)), és ha van, akkor az mplayer-t "-vf expand=:::::4/3"-al indítja (hogy a felirat a feketes sávba legyen), ha nincs, akkor pedig simán! Azért nem volt jó, ha mindig ott ez a vf paraméter, mert némely film mellé szürke keretet rakott (ami esetleg más méretarányú, és nem alá kelett a kiegészítés, hanem mellé).
Meg is írtam (leht, hogy kissé fapados, aki tudja, majd javít rajta, de a dolgát teszi), csak egy a gond vele, hogy ha olyan könyvtárból indítom, amelyik nevében vagy az útvolnaban bárhol szóköz van, akkor nem találja a felirat fájl-t. Hogyan lehetne megoldani, hogy müködjön így is. Illetve, ha valakinek bármilyen egyéb ötlete van, szívesen fogadom!
íme a szkript:
#!/bin/sh
FILE=$1
SRT=`echo -n "$FILE" | sed 's/\.[a-zA-Z0-9]\+$/.srt/'`
SUB=`echo -n "$FILE" | sed 's/\.[a-zA-Z0-9]\+$/.sub/'`
vansrt=`ls $SRT`
vansub=`ls $SUB`
if [ $vansrt = $SRT ]; then
echo "mplayer inditasa (srt) felirattal..."
/usr/bin/mplayer -vf expand=:::::16/10 "$FILE"
else
if [ $vansub = $SUB ]; then
echo "mplayer inditasa (sub) felirattal..."
/usr/bin/mplayer -vf expand=:::::16/10 "$FILE"
else
echo "mplayer inditasa felirat nelkul..."
/usr/bin/mplayer "$FILE"
fi
fi
Közben írtam egy másik egyszerűt, ami csak annyit tesz, hogy ha a feliratra kattintok, akkor elindítja a filmet vf -el (ez megy akármilyen könyvtárból), végülis, ez sem rossz megoldás, és egyszerű is, de jobb szeretném, ha a filmre kattintva is menne a dolog autómatikusan.
Íme ez a szkipt (mondtam, hogy egyszerű ;) ):
#!/bin/sh
FILE=$1
FILM=`echo -n "$FILE" | sed 's/\.[a-zA-Z0-9]\+$/.avi/'`
/usr/bin/mplayer -vf expand=:::::4/3 "$FILM"
<= Powered By Ubuntu & Gentoo Linux =>
'Software is like sex: It's better when it's free!'
By Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Talán:
vansrt=`ls "$SRT"`
vansub=`ls "$SUB"`
- A hozzászóláshoz be kell jelentkezni
Inkább:
vansrt=$(ls "${SRT}")
vansub=$(ls "${SUB}")
- A hozzászóláshoz be kell jelentkezni
Ez teljesen ugyanaz
- A hozzászóláshoz be kell jelentkezni
Jááááj...
vansrt=`ls $SRT`
vansub=`ls $SUB`
if [ $vansrt = $SRT ]; then
helyett:
if [ \(-s ${SRT} -a -r ${SRT} \) -o \(-s ${SUB} -a -r ${SUB} \) ]
then
# mehet a lejátszás
talán picit szebb megoldás...
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek a segítséget! De a gond, nem azzal van, hogy müködik-e a script-em, mert, lehet, hogy nem túl szép, de működik, kivéve, ha az útvonalban szóköz van (és erre keresném elsősorban a megoldást)!
Ez viszont, amit írtál, hogy mire cseréljem a ciklusom, nem működik :(.
köszönöm mindenkinek
<= Powered By Ubuntu & Gentoo Linux =>
'Software is like sex: It's better when it's free!'
By Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Mivel dől az kardjába, hogy nem megy? (Egyébként nem ciklus, hanem elágazás, úgyhogy elégtelen, leülhetsz!)
if [ \( -s "${SRT}" -a -r "${SRT}" \) -o \( -s "${SUB}" -a -r "${SUB}" \) ]
Öregszem, az idézőjelet lehagytam. Eseleg a két változó feltöltésénél lehetne egy
s/\ /\\\ /g
de az idézőjeles megoldás szebb.
- A hozzászóláshoz be kell jelentkezni
Nekem most egy olyan furmanyos script-be kene segitseg. Hogy van egy Debian-os gep amin valami spec progi es teljesen el van zarva a kulvilagtol a gep. Viszont egy olyan lehetoseget kell biztositani a szakiknak (tudjanak minden fele bealliast csinalni) hogy egy reboot utan a program inditasa elott el tudjak erni a gepet x ideig aztan folytatjuk a boot es bezarul minden eleres.
Nekem igazabol az hogy ezt hogyan lehet megoldani?
( ennel jobban nem tudom elmondni mivel igy kaptam az infot en is... :( )
- A hozzászóláshoz be kell jelentkezni
Mondjuk X futási szinten indulni (ssh, miegymás engedélyezve), aztán vagy kézi, vagy időzített Y futási szintre váltással ssh-t, miegymást lezárni?
Lásd:
man inittab (initdefault)
man init
/etc/rc?.d könyvtárak
- A hozzászóláshoz be kell jelentkezni
Ez eddig ok.
De az rc?.d-ben van olyan hogy S20 es ebbol tobb is. Melyik indul el??? Vagy milyen sorrendet vesz alapul mivel itt van tobb S20-as is.
- A hozzászóláshoz be kell jelentkezni
Asszem abc sorrend dont, a debian nem kezel fuggosegeket az init scriptek kozt.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
--dupla, torolve--
- A hozzászóláshoz be kell jelentkezni
man inittab, ahogy az egyik kartács is írta. Hint: sysyinit, az ott megadott script tanulmányozása, az indulási folyamat végiggondolása, megértése.
- A hozzászóláshoz be kell jelentkezni
if [ -d "${HOME}/vp21/bin.lnx" ]; then
echo RUN
else
cd /usr/share/vp21
./install.sh
fi
...
A fenti kódra vajon miért ad "syntax error near unexpected token `else'" hibát?
- A hozzászóláshoz be kell jelentkezni
teljesen folosleges *szerintem* tobb topikban is megkerdezni ugyanazt.
t
- A hozzászóláshoz be kell jelentkezni
Miután elküldtem, nem jelent meg sehol és elkezdtem az egészet újra. Azt már nem is tudtam, hogy nem ugyanabba a topikba másztam bele másodszor, de így legalább nem lett duplázva.
- A hozzászóláshoz be kell jelentkezni
Kis awk segítséget szeretnék.
Van egy file, benne szóközökkel oszlopok:
oszlop1 oszlop2 oszlop3 oszlop4 # oszlop6 oszlop7
Ebből nekem csak 1,3,4,#,6,7 oszlopok kellenének. Eddig nem gond. Hogyan lehetne azt megcsinálni, hogy:
1. a # után minden oszlopot mutasson _vagy_
2. a 4. oszloptól minden oszlopot mutasson.
Most így néz ki:
awk '{print $1,substr($3,1,2),$4,$5,$6,$7}'
jól működik, de biztos van elegánsabb megoldás is...
Köszi,
Mik
- A hozzászóláshoz be kell jelentkezni
awk '{$2="";print}'
- A hozzászóláshoz be kell jelentkezni
Köszi zeller ez lesz az. (a hozzászólás korábbi verzióját is meghagyhattad volna, érdekes volt :)
Azthittem, hogy meg tudom oldani, de nem. Hogyan lehetne ebbe a substr($3,1,2) -t belecsempészni?
- A hozzászóláshoz be kell jelentkezni
remélem míg eme hszt olvasod homlokoddal neten megtalálod a megoldást, ha nem hajolj közelebb:)
- A hozzászóláshoz be kell jelentkezni
Ha jól értelmezem (számomra kissé kusza) eredeti felvetésedet, pont a zeller által kitörölt $2 helyére akarod azt a substr -t. Hát akkor? Cseréld ki arra:
awk '{$2=substr($3,1,2); print;}'
- A hozzászóláshoz be kell jelentkezni
Igen, nem teljesen pontosan írtam le a problémát, bíztam magamban, hogy a megoldási ötletekből össze tudom hozni. Egyébként amit írtál azt kerestem. Köszi Neked is és zellernek is!
- A hozzászóláshoz be kell jelentkezni
Az awk -F# '{print $2}'-re, meg az awk '{$1="";$2="";$3=""; print}' -re gondolsz?
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Egyszeru problemam van csak nem lelem a megoldast, filebol szeretnek 1 sor kiiratni, az hogyan lehet?
Most igy van:
head -n5 file | tail -n1
De szerintem ennel letezik egyszerubb es szebb megoldas is.
- A hozzászóláshoz be kell jelentkezni
Szerintem nem olyan rossz ez a megoldás, de például:
$ sed -n '5p' fájlnév
- A hozzászóláshoz be kell jelentkezni
Valami ilyesmire emlekeztem, de a man-bol nem hamoztam ki e megoldast.
Thx.
- A hozzászóláshoz be kell jelentkezni
Egy gyors kerdes, hogyan tudom lekerdezni, hogy a filrendszer (felenev) milyen karakterkodolasra van beallitva.
(utf8 | iso8859-2...)
- A hozzászóláshoz be kell jelentkezni
AFAIK magának a filerendszernek nincs beállított kódolása, a programok a locale-ban az LC_CTYPE határozza meg, hogy a programok milyen kódolással írják/olvassák a filerendszert.
- A hozzászóláshoz be kell jelentkezni
amely LC_CTYPE felulbiralhato az LC_ALL valtozoval, es ha egyik sincs beallitva, jobb hijjan jo lesz a LANG is :-)
- A hozzászóláshoz be kell jelentkezni
Nem az LC_CTYPE környezeti változót írtam, hanem a locale LC_CTYPE változóját (amit a locale kiír). Ez a ténylegesen használt beállítás.
- A hozzászóláshoz be kell jelentkezni
Amely locale LC_CTYPE valtozojat hogyan allitod be? Mert a hagyomanyos modszer ezeknek a fenti kornyezeti valtozokkal valo allitasa (kiveve azon szoftver, amelyik maga allitja setlocale() -lal)
- A hozzászóláshoz be kell jelentkezni
A környezeti változókkal állítom be, de itt a lekérdezéséről volt szó.
- A hozzászóláshoz be kell jelentkezni
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=
Ebbol hogy dontom el, hogy iso8859-2 re kell konvertalnom es nem pl. 8859-1 re?
Ez esetben a helyes valasz a iso8859-2 lenne.
- A hozzászóláshoz be kell jelentkezni
Ha magyar a szöveg, akkor -1-be nem lehet konvertálni. Ha működnek az ékezetes karakterek, akkor biztosan nem -1-et használ a rendszer.
- A hozzászóláshoz be kell jelentkezni
Az ok, de a problemam: a netrol letoltott fileokkal van a gondom, pl. utf8 ban van a filenev, iso8859-2 ben van a "normalisan" ilyenkor ugy iconv ezt szeretnem automatizalni, de nem ugy, hogy fixen beegetve, hanem gondoltam valami automatikus modra.
- A hozzászóláshoz be kell jelentkezni
Ezt elég zavarosan fogalmaztad. Mivel töltöd le a fájlokat? A rendszereden ISO-8859-2-t használsz?
- A hozzászóláshoz be kell jelentkezni
pl. rtorrent, de cd-n is kaptam mar utf8-as fileneveket.
Van iso8859-2 es utf8 vegyesen. A script mast is csinalna, altalanosabb celura szeretnem csinalni.
- A hozzászóláshoz be kell jelentkezni
Ha össze van keverve, akkor biztosan nem lehet megállapítani, de a file parancs nagy valószínűséggel megmondja:
file - <<< fájlnév
Ha ISO-8859-x, akkor nem lehet megállapítani, hogy melyik, de ha magyar, akkor -2.
Nem tudom, hogy a torrent protokoll specifikálja-e a fájlnév kódolását, nem hiszem, akkor ez helyzet, tehát az, hogy csak heurisztikus módszerekkel lehet kitalálni (file parancs).
A CD/DVD fájlrendszerek megadják, hogy milyen kódolással vannak rajtuk a fájlok, a windowsos fájlrendszerek pedig UTF-16-ban tárolják a fájlokat. A rendszer ezeket konvertálva látja, az iocharset/nls/utf8 mount opcióban lehet megadni, hogy milyen kódolással, alapértelmezés iso-8859-1. Jó esetben meg kell egyeznie a redszer által használt kódolással, tehát az LC_CTYPE-pal.
- A hozzászóláshoz be kell jelentkezni
Koszi ez segitett, bar asszem akkor inkabb marad a config file megoldas, csak akartam logikat vinni bele.
- A hozzászóláshoz be kell jelentkezni
Sziasztok! Szeretnék segítséget kérni az alábbi szkripthez.
#!/bin/bash
# factr.sh: Primtenyezokre bontas
echo "Adja meg a szamot"
read SZAM
echo "A $SZAM primtenyezoi:"
factor $SZAM | sed s/" "/"*"/g
exit
Ez kimenetként azt írja ki ha mondjuk a 12-t adom meg számnak, hogy
A 12 primtenyezoi:
12:*2*2*3
A feladatom az, hogy a szóközöket cseréljem ki csillagokra, de az elsőt nem akarnám kicserélni. Hogyan lehet ezt megoldani?
Köszi előre is!
Ha pedig valaki segítene ezt átültetni powershellbe, annak még külön 1000 hálám..
- A hozzászóláshoz be kell jelentkezni
Lehet valahogy a szöveg környezetét is vizsgálni regexpben (és megnézni, hogy az adott space előtt van-e kettőspont), de hátha nem alszol még és megörülsz más megoldásnak.
factor 12 | sed -r 's/ /*/g' | sed -r 's/:\*/: /'
factor 12 | sed -r 's/([0-9]) /\1*/g'
- A hozzászóláshoz be kell jelentkezni
Köszi szépen, így működik!
Így utólag látom hogy mennyire egyszerű...... kell még egy kis rutin..
- A hozzászóláshoz be kell jelentkezni
lehet,h butasagot fogok kerdezni, elore is elnezest erte.
tud a sed szamtani alapmuveleteket?
van 1 .csv, amely minden sor 4. oszlopa 1 napi atlaghomerseklet adatot tartalmaz fahrenheitben. ezt szeretnem atszamolni celsiusba.
valami ilyesmire gondoltam (vazlat):
sed 's/TEMP/[C]=([F]-32)*5/9/g' F >C
a regex meg hianyzik. vagy barmi, amivel raveszem,h a 4. oszlopban munkalkodjon.
ha a sed erre alkalmatlan, akkor mit ajanlotok ilyen, es ehhez hasonlo feladatok elvegzesehez. AWK, Perl, Python?
nem konkret megoldast varok, csak kis utbaigazitast. szeretnem megtanulni.
a segitseget elore is koszonom.
- A hozzászóláshoz be kell jelentkezni
Akármelyik megfelel, de az awkban nagyon egyszerű:
awk -F ';' '{ $4 =($4 - 32) * 5 / 9; print }'
- A hozzászóláshoz be kell jelentkezni
nagyon koszonom. majdnem tokeletes.
ha igy hasznalom, csinal 1 ujabb oszlopot es vegigirja,h -17,7778.
ha a pontosvesszot vesszore cserelem, akkor atszamolja a 4. oszlopot.
a gond csak az,h
1. az elso sor fejlec. tehat ugorja at es kezdje a 2. sorban.
2. az egesz fajlbol kiveszi a vesszoket es space delimited tesz. miert?
nagzon megkoszonnem ha roviden elmagyaraznad hogy is mukodik az altalad irt script.
amibol en tanulok awk-t (kereken 1 hete:)
Pere László - Linux felhasználói ismeretek II. kötet
The GNU Awk User's Guide
http://www.grymoire.com/Unix/Awk.html
http://www.catonmat.net/blog/awk-one-liners-explained-part-one/
egyeb otlet?
koszi!
- A hozzászóláshoz be kell jelentkezni
awk -F\; 'BEGIN {OFS=";"}
NR>1 {$4=($4-32)*5/9;
print; }
NR==1 '
Bővebb magyarázat:
Az awk script minta - tevékenység "párokból áll. A speciális mintákhoz (BEGIN, END) tartozó tevékenységek az első rekord beolvasása előtt, illetve az utolsó rekord beolvasása után futnak le.
A -F kapcsolóval a mezőelválasztót állítjuk be ";"-re. A BEGIN mintánál pedig az awk egyik belső változóját, a kimeneti mezőelválasztót (OFS).
A következő minta az NR>1, azaz a beolvasott rekordok száma több, mint 1 -- a második sortól kezdve végrehajtja a megadott tevékenységet, azaz számol és kiír.
Az utolsó minta mellett nincs megadva tevékenység, ekkor az awk az alapértelmezett tevékenységet (kiírás) hajtja végre -- ahogy a minta mutatja akkor, ha a beolvasott rekordok száma pontosan egy, vagyis az első sornál.
Lehet minta nélküli tevékenységet is megadni, ez minden bementi rekordra végrehajtásra kerül azaz:
awk -F\; 'BEGIN {OFS=";"}
NR>1 {$4=($4-32)*5/9;}
{print;}'
Ekkor azokra a rekordokra, amikre igaz az NR>1, azokra elvégzi a számolást, utána pedig valamennyi rekordot ki is írja.
- A hozzászóláshoz be kell jelentkezni
szuper. koszi a magyarazatot.
talan meg annyit szeretnek finomitani,h 1 tizedesre kerekitsen.
- A hozzászóláshoz be kell jelentkezni
awk -F\; 'BEGIN {OFS=";"}
NR>1 {$4=($4-32)*5/9; printf "%s;%s;%s;%.1f\n", $1,$2,$3,$4; }
NR==1 '
Vagy:
awk -F\; 'BEGIN {OFS=";"} ## kimeneti szep
NR>1 {$4=int(0.5+($4-32)*50/9)/10;}
{printf}'
- A hozzászóláshoz be kell jelentkezni
sed s/sed/awk/ de lehet perl-ben is, sima bash is tud "néhány" dolgot.
- A hozzászóláshoz be kell jelentkezni
igy nez ki a bemenet 1 pici reszlete:
STN---,WBAN , YEARMODA, TEMP, , DEWP, , SLP , , STP , , VISIB, , WDSP, , MXSPD, GUST, MAX , MIN ,PRCP ,SNDP , FRSHTT,
110100,99999, 20080101, 30.7,24, 28.7,24, 9999.9, 0, 9999.9, 0, 4.7,24, 5.0,24, 8.9, 999.9, 33.8*, 23.0*, 0.00E, 0.4, 001000,
110100,99999, 20080102, 27.4,24, 24.1,24, 9999.9, 0, 9999.9, 0, 5.3,24, 6.8,24, 15.9, 999.9, 32.7 , 22.3 , 0.00E, 0.4, 001000,
110100,99999, 20080103, 28.1,24, 19.8,24, 9999.9, 0, 9999.9, 0, 5.8,24, 8.8,24, 18.1, 28.0, 36.1 , 17.6 , 0.00I,999.9, 100000,
a 4.TEMP (majd kesobb a 12.MAX,13.MIN) oszlopban levo homersekleti adatokat szeretnem atvaltani celsiusba (a peldaban: 30.7 27.4 28.1).
a homerseklettol veszovel elvalasztott szam (peldaban 24), es a tablazatban levo osszes adat ne valtozzon (se az ertek, se a space szam), csak a 4. oszlop.
igy probalkozom:
NR>1{$3=($3-32)*5/9;printf"%.1f\n",$3}
NR==1
sajnos a fejlecen es a homersekleti adatokon kivul - ertheto modon - minden elveszik.
hogy lehet megcsinalni amit szeretnek ugy,h - tetelezzuk fel - nem tudom hany oszlopot tartalmaz a fajl?
kezdem kapizsgalni a python-t es az awk-t, de meg nagyon az elejen tartok.
- A hozzászóláshoz be kell jelentkezni
awk -F\, 'BEGIN {OFS=","}
NR>1 {$4=int(0.5+($4-32)*50/9)/10;
$12=int(0.5+($12-32)*50/9)/10;
$13=int(0.5+($13-32)*50/9)/10;}
{print}'
A bemenet:
STN---,WBAN , YEARMODA, TEMP, , DEWP, , SLP , , STP , , VISIB, , WDSP, , MXSPD, GUST, MAX , MIN ,PRCP ,SNDP , FRSHTT,
110100,99999, 20080101, 30.7,24, 28.7,24, 9999.9, 0, 9999.9, 0, 4.7,24, 5.0,24, 8.9, 999.9, 33.8*, 23.0*, 0.00E, 0.4, 001000,
110100,99999, 20080102, 27.4,24, 24.1,24, 9999.9, 0, 9999.9, 0, 5.3,24, 6.8,24, 15.9, 999.9, 32.7 , 22.3 , 0.00E, 0.4, 001000,
110100,99999, 20080103, 28.1,24, 19.8,24, 9999.9, 0, 9999.9, 0, 5.8,24, 8.8,24, 18.1, 28.0, 36.1 , 17.6 , 0.00I,999.9, 100000,
Az eredmény:
STN---,WBAN , YEARMODA, TEMP, , DEWP, , SLP , , STP , , VISIB, , WDSP, , MXSPD, GUST, MAX , MIN ,PRCP ,SNDP , FRSHTT,
110100,99999, 20080101,-0.6,24, 28.7,24, 9999.9, 0, 9999.9, 0,-15.1,-4.3, 5.0,24, 8.9, 999.9, 33.8*, 23.0*, 0.00E, 0.4, 001000,
110100,99999, 20080102,-2.5,24, 24.1,24, 9999.9, 0, 9999.9, 0,-14.7,-4.3, 6.8,24, 15.9, 999.9, 32.7 , 22.3 , 0.00E, 0.4, 001000,
110100,99999, 20080103,-2.1,24, 19.8,24, 9999.9, 0, 9999.9, 0,-14.5,-4.3, 8.8,24, 18.1, 28.0, 36.1 , 17.6 , 0.00I,999.9, 100000,
- A hozzászóláshoz be kell jelentkezni
nagyon koszonom,h segitesz!
a bemenet egesz pontosan igy nez ki:
http://www1.ncdc.noaa.gov/pub/orders/CDO1668911735725.txt
van benne space, tab (v. tobb space), vesszo.
gondolom ezert van,h nalam a kimenet elcsuszik.
az altalad irt szkriptet ertem, csak hiaba modositgatom, nem tudom ugy megcsinalni,h ne csusszon el.
- A hozzászóláshoz be kell jelentkezni
"van benne space, tab (v. tobb space), vesszo."
Csak a pontosítás miatt: az első hozzászólásban CSV-ként határoztad meg a formátumot, így a mezőhatároló a vessző, a többi pedig a mező tartalma.
Tehát, kérésednek megfelelően, az elsőre számnak látszó mezők (a mezőhatároló vesszők által közrefogott terület) valójában továbbra is szövegként kezelendők, de a benne lévő egy darab számot át kell alakítani.
"gondolom ezert van,h nalam a kimenet elcsuszik."
Hogyan és mi csúszik el mihez viszonyítva? A linkelt táblázat egy CSV, de nem elhanyagolható, hogy az adatai fix mezőszélességre vannak kitöltve. Most azt kérted, hogy a mezőben lévő kitöltő karakterekhez (whitespace) ne nyúljunk. Így ennek az lesz a folyománya, hogy mivel a táblázatban szereplő hőmérsékletértékek Celsiusban kifejezve negatív értékek is lehetnek, valamint egy- és kétjegyű is lehet az egészérték, ezért ezekben az esetekben változhat a szám hossza, valamint nem feltétlen egyezik meg a Fahrenheitben kifejezett hosszal.
Lehet hogy van jobb és szebb megoldás, de ha a számolás után visszahelyettesítjük az új értéket a régi helyére, akkor megfelelő lesz a kimenet. Módosítva zeller példáját:
awk -F\, 'BEGIN {OFS=","}
NR>1 {uj4=int(0.5+($4-32)*50/9)/10;
uj12=int(0.5+($12-32)*50/9)/10;
uj13=int(0.5+($13-32)*50/9)/10;
sub(/[0-9.-]+/, uj4, $4);
sub(/[0-9.-]+/, uj12, $12);
sub(/[0-9.-]+/, uj13, $13);}
{print}'
- A hozzászóláshoz be kell jelentkezni
szuper. koszonom! majdnem azt csinalja, amit latni szeretnek.
csak meg mindig elcsuszik az eredetihez kepest. lehet,h ez nem is olyan fontos, de szeretnem megtanulni.
ha a fahrenheit 30.7 akkor a celsius -0.6 lesz. mindharom ertek 4 karakter, tehat a sor nem csuszik.
ha F=24.7, akkor C=-4, igy az egesz sor csuszik 2 karaktert balra.
ezt szeretnem kikuszobolni. mezon belul lehet jobbra igazitani? vagy hogy tudom megtartani a fix mezoszelesseget?
azert fogalmazok pontatlanul, mert (egyenlore) nem ertek hozza. de szeretnek. mert kell es mert erdekel. megegyszer koszonom,h segitetek.
- A hozzászóláshoz be kell jelentkezni
EgyeLőre, n nélkül. A bemeneti és a kimeneti sorok hosszát egyeNlőre szeretnéd beállítani, ami egyelőre nem megy.
Ha fix mezőszélességet akarsz, akkor a printf és %Ns meg %Nd illetve %N,Mf a barátaid.
A %s balra, a %d és %f jobbra igazít, ennek megfordításához a mező szélességét negatív előjellel kell ellátni. A mező szélessége legalább a % után megadott érték lesz, tehát ha egy %2s mezőbe berakod, hogy "blabla", akkor a mező nem kettő, hanem hat karakter széles lesz.
$ echo egy |awk ' {printf "|%5s|%-5s|%1s|\n", $1, $1, $1;}
END {print "|12345|12345|12345|";}'
| egy|egy |egy|
|12345|12345|12345|
- A hozzászóláshoz be kell jelentkezni
koszonom zeller, sikerult!
BEGIN {OFS=","}
NR>1 {$4=int(0.5+($4-32)*50/9)/10;
$18=int(0.5+($18-32)*50/9)/10;
$19=int(0.5+($19-32)*50/9)/10;}
{printf "%6s,%5s,%9s,%7s,%2s,%6s,%2s,%6s,%2s,%7s,%2s,%6s,%2s,%6s,%2s,%6s,%5s,%8s,%7s,%5s,%5s,%7s,\n" \
,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22;}
eleg "barkacs" megoldasnak tunik, de mukodik.
hogyan tudom ugyanezt 1 olyan bemenettel elvegezni, ahol nem ismerem a mezok szamat?
tehat minden mezohatarolo maradjon a helyen.
- A hozzászóláshoz be kell jelentkezni
Ha az IFS nem whitespace (space, tab), hanem mondjuk ",", akkor a szóköz is a mező része, ergo a sima print $0 is korrket kiementet fog adni -- hacsak valamelyik mező tartalma nem változott meg.
A sprintf() és a length() használatával azért lehet érdekes dolgokat művelni:
$ awk -F, '{uj=int(0.5+($2-32)*50/9)/10; printf(sprintf("%%s,%%%d.2f,\n",length($2)), $1, uj); }'
Bemenet:
a , 123,
aaaaaaa, 23 ,
Kimenet:
a , 50.60,
aaaaaaa, -4.90,
Ismeretlen számú mező esetén ciklus 1-től NF-ig, a cikluson belül meg elágazni: ahol számolni kell, ott a fenti sprintf... length móka, ahol meg nem, ott egy sima printf "%s" $i.
Még egy dolog. Ha a teljes kimeneti rekordot te rakod printf() használatával össze, akkor fölösleges az OFS megadása.
Esetleg lehet az OFMT-vel is játszadozni...
- A hozzászóláshoz be kell jelentkezni
koszi a segitseget. utana fogok olvasni az altalad emlitett dolgoknak.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
A következő problémára keresek megoldást, lehetőleg awk-ban, vagy perl-ben.
Van egy logfile, ahol egy log bejegyzés több sorból áll, és az egyes bejegyzéseket egy üres sor választja el egymástól.
Azaz:
log entry 1 kezdodik (timestamp)
log entry 1 ...
log entry 1 ...
log entry 1 vege
log entry 2 kezdodik
log entry 2 ...
log entry 2 vege
A feladat, hogy az egyes log entryket egy sorossá konvertáljam, azaz pl:
log entry 1 kezdodik (timestamp) log entry 1 ... log entry 1 ... log entry 1 vege
log entry 2 kezdodik log entry 2 ... log entry 2 vege
Jelenleg a lenti, eleg ronda megoldasom van awk-ban, valami elegansabbat szeretnek, ami nem csak 10 soros log entrykig működik :)
Előre is köszönöm a segítséget!
BEGIN { RS="" } { print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10; }
- A hozzászóláshoz be kell jelentkezni
5let:
{ printf "%s ", $0; }
/^$/ { printf "\n"; }
- A hozzászóláshoz be kell jelentkezni
kösz, jó lett!
- A hozzászóláshoz be kell jelentkezni
Üdv
lenne egy olyan esztétikai problémám, hogy albiban lakom, és kb 5en használunk 1,5 Mbit internetet.
egy olyan megoldásra lennék kíváncsi:
egy script figyeli a routert, vagy belső hálózatot, hogy éppen hányan lógnak rajta, és ez alapján határozná meg a letöltési sebességem. gondolok itt arra, hogy ha senki nem használja a netet, 100kb/s töltsön, ha 2,3,4,5 ember, akkor 80, 50, 25, 12 kb/s-re korlátozza a netem.
nagyrészt torrentezek, eddig manuálisan állítottam, ha nagyon hupákoltak, lecsökentettem 50-re.
megközzelítés: végigpingelek 10-15 IP-t, megnézem a válaszolt IP-k számát, és eszerint korlátozom, elég ha a transmission klienst, de ha ez nem megoldható, akkor az egész ubuntut 8.04
tud ebben segíteni nekem valaki?
- A hozzászóláshoz be kell jelentkezni
1. Fix IP címeket oszt a router? (Azaz lehet tudni, hogy mik a lehetséges kliensek? Én így csinálnám.)
2. A routeren Linux fut, ill. lehet scripteket futtatni?
3. Ha jól tudom, vannak olyan megoldások, amik a router-en alacsonyabb prioritásúra állítják a torrentet, ebben talán mások segítenek.
- A hozzászóláshoz be kell jelentkezni
annyira nem bonyolúlt, kérdésem inkább az lenne bash-el hogy tudnám korlátozni mondjuk az eth0/wlan0 interfészt?
üdv xilu
- A hozzászóláshoz be kell jelentkezni
háj
aliases fájlal kapcsolatban kérnék segítséget.
spam: "| /usr/bin/dspamc --client --user $u --class=spam --source=error"
ez egyenlőre = spam@domain.com-al. működik
ez eddig jó, úgy kéne megoldani, hogy
spam-$VIRTUAL_USER$: "| /usr/bin/dspamc --client --user $u --class=spam --source=error"
az userek MYSQL táblában vannak.
- A hozzászóláshoz be kell jelentkezni
1) egyenlore a darabolos gyilkos fog vagni, de egyelore talan megkimel.
2) A MySQL transport tablaba kell asszem ezt betenni, bar a virtual aliases tablaba ugyanez a szuros kifejezes is muxhet. mindenkihez kulon aliast kell felvenni, ezt a kesobbiekben egy trigger alkalmazasaval kerulheted meg.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Van egy olyan problémám, hogy a gnome-screensaver, de az xscreensaver sem kapcsolja ki a laptop kijelzőjét. Kutakodtam, és megtaláltam, hogy ezt az xset-el csinálja ill csinálná, kipróbáltam, tényleg nem csinálja, viszont a vbetool kikapcsolja. Kutattam a neten, de nem találtam megoldást arra, hogyan mondhatnám meg a képenyővédőnek, hogy a vbetool-t használja az xset helyett, így arra gondoltam, írnék egy kis script-et, amit xset néven elmentek, így azt hívná meg a képernyővédő, de a script a vbetool-t futtatná. A lényeg a xset így müködik: 'xset dpms force off' a vbetool pedig 'vbetool dpms off' ill 'xset dpms force on', 'vbetool dpms force on', szóval nem egyezik a paraméterezés, ezért olyan scriptet kéne írni, amit ha dpms force off -paraméterrel indítok, akkor a 'vbetool dpms off' parancsot hajtja végre, ha dpms force on -paraméterrel indítom, akkor pedig a 'vbetool dpms on' -t hajtja végre.
Ha bárkinek van jobb ötlete, azt is szívesen fogadom!
köszönöm
<= Powered By Ubuntu & Gentoo Linux =>
'Software is like sex: It's better when it's free!'
By Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Senkinek sincs ötlete? :(, vagy pontatlanul, esetleg rosszul fogalmaztam?
<= Powered By Ubuntu & Gentoo Linux =>
'Software is like sex: It's better when it's free!'
By Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Igen, ezt a scriptet kell megírni.
- A hozzászóláshoz be kell jelentkezni
xset:
#!/bin/sh
[ "X$0" = Xxset -a "X$1" = Xdpms -a "X$2" = Xforce ] && vbetool $1 $3 || xset.orig "$@"
Feltetelezve, hogy az eredeti xset -et xset.orig neven mentetted el valahova. (Esetleg mindent lehet torolni a "[" utantol az elso "-a"-ig bezarolag, ha esetleg az xset-et elkepzelheto, hogy PATH-szal egyutt hivja barki is.)
- A hozzászóláshoz be kell jelentkezni
Köszönöm, kipróbálom!
<= Powered By Ubuntu & Gentoo Linux =>
'Software is like sex: It's better when it's free!'
By Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Najo, jofej leszek, bar kb 5 perc googlezas utan vagy egy man bash kiadasaval akarki meg tudna oldani a dolgot.
Az alabbi megoldas valoszinuleg nem a legszebb, legjobb, stb, ellenben ez jutott eszembe, es elvileg mukodik. Jo szokasom szerint nem probaltam ki, ha bugos, majd kijavitja aki akarja.
Tehat:
#! /bin/sh
case "$@" in
*dpms*)
vbetool dpms $3
;;
*)
echo "Unhandled parameters: $@" >&2
exit 1
;;
esac
Edit: wow, eletemben eloszor veszem eszre a lap aljan a kovetkezo oldalra atvivo linket. Mindig tanul valamit az ember!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
A problema:
Amikor a sikeresen megnyitott fajlokat keressuk (vagy a sikeresen elinditott programokat) vigyazzunk arra, hogy pl az open(2) vagy execve(2) hivasoknal – a systém cals ok gy fognak kinezni, ezt megnezhetjuk az sh.strace fajlon: Szvl meg azt is figyelemmel kell kiserni h a processz meg fut e.
PID open("soubor", ...,
es amikor visszaadtuk a jogokat az eredeti processznek ezt figyeljuk
PID <... open resumed> ) = folyamat eredmenye
, ez tipikus peldaja annak, hogy a kernel nem var a hardware-re es azkozben kulonbozo processzeket is futtat.
pl itt: http://www.fit.vutbr.cz/study/courses/IOS/public/Lab/projekt1/sh.strace
ezen a fajlon nezhetjuk meg..
Elore is koszonom a segitseget!!
AZ ELSO PROBLEMA MEGOLDODOTT:
szerintetek ezt hogy lehetne megoldani?
$SCALLS van egy txt fajlban es lekellene cserelni egy tobbsoros szoveggel?
- A hozzászóláshoz be kell jelentkezni
nm vlna bj, h kcsit jbban fgyelnl a zirasdra, mrt kcsit nhzn olvashato.
vlsz: man sed
- A hozzászóláshoz be kell jelentkezni
$SCALLS van egy txt fajlban es lekellene cserelni egy tobbsoros szoveggel?
ed!
(cat <<EOF
/\$SCALLS
d
a
$TOBBSOROSSZOVEG
.
w
q
EOF
) | ed -p $file
ezt szepen ciklusban amig grep -q '$SCALLS' $file azt jelzi hogy van meg mit tenni.
Csunya, ronda, de epp ez a jo benne.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
van egy log fileom, amiben nehany logbejegyzes a kovetkezo formaju:
2009-01-11 whatever [97,98,99,100,101]
ez egy lista, ami betuk ascii kodjat tartalmazza.
az ilyen entryket szeretnem atforgatni ilyen formajura:
2009-01-11 whatever [abcde]
Tehat az a lenyeg, hogy a lista helyett a sztringet szeretnem latni.
Van egy nagyon csunya megoldasom awk-ban, ami rekordonkent megnezi, hogy lista formaju-e, utana split-tel a ',' karakternel, majd sprintf-el kiir. Ha esetleg valakinek van elegansabb otlete, azt megkoszonnem! :)
- A hozzászóláshoz be kell jelentkezni
"Ha esetleg valakinek van elegansabb otlete..."
Az erősen kérdéses, hogy elegánsabb-e, de alant egy példa Perlben.
perl -ne 's/((\[)|(,))([0-9]+)/\2".chr(\4)."/g; eval("print \"$_\"")'
- A hozzászóláshoz be kell jelentkezni
van egyszerubb, az egyik a te magoldasod modositva:
perl -ple 's/((\[)|(,))([0-9]+)/$2.chr($4)/ge' < string
masik ahol csak $1 van:
perl -ple 's/(?:(?<=\[)|(?>,))([0-9]+)/chr($1)/ge'
- A hozzászóláshoz be kell jelentkezni
Tényleg egyszerűbb, és szebb is. Nem véletlen voltak fenntartásaim az eleganciával kapcsolatban. :)
- A hozzászóláshoz be kell jelentkezni
Kicsit átírtam, mert rájöttem, hogy nem specifikáltam minden feltételt, de tetszik a megoldás. Köszönöm!
- A hozzászóláshoz be kell jelentkezni
Sziasztok
Van egy parancsom, ami többsoros kiemnetet ad, konkrétan df.
Ha kíváncsi vagyok egy partíción lévő szabad helyre, akkor grep partíciónév | awk'{print $4}' -gyel pipe-olva megkapom.
Namost ezt szeretném megcsinálni több partícióra, vagyis a kimenetnek minden sorára egyszerre úgy, hogy csak egyszer kelljen meghívni a df-et.
Meg lehet ezt úszni ideiglenes fájl létrehozása nélkül?
Vagy valami más ötlet esetleg?
Kösz, üdv
- A hozzászóláshoz be kell jelentkezni
df|awk'/^\// {print $4}'
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
THX!
- A hozzászóláshoz be kell jelentkezni
Jujjj... moo | grep foo | awk '{bar}'... Elégtelen, leülhetsz :-P
moo | awk '/foo/ {bar}'
- A hozzászóláshoz be kell jelentkezni
Igen, jogos, közben rájöttem, mert miért ne adhatnék a grep-nek több keresendő szót?
Kösz mindenkinek a választ még egyszer.
"Kedves Naplóm!
if [ -e $question]
then RTFM
"
tsb
- A hozzászóláshoz be kell jelentkezni
Optimalizalva:
[[ -n "${question}" ]] && RTFM >> my_diary.txt
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
df part1 part2 ...
:)
- A hozzászóláshoz be kell jelentkezni
Ez: http://hup.hu/node/53223#comment-532337 nekem sokat segített.
- A hozzászóláshoz be kell jelentkezni
Üdv!
Állítólag ez lassabb:
yes | head -n100000000 | grep y >/dev/null && echo Ipszilon lassan
mint ez:
yes | head -n100000000 | grep -q y && echo Ipszilon gyorsan
Tipp: a man nem ír semmit arról, hogy a grep "-q" paraméterrel használva a legelső találat esetén kilép-e vagy sem, szerintem igen (ami olykor kapóra jöhet)
Véleményt, tapasztalatokat várok.
ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne
- A hozzászóláshoz be kell jelentkezni
Vélemény:
- a grep -q opciója nem arra van, hogy kilépjen, tehát nem lép ki.
- ellenben természetesen gyorsabb, lévén nem kell kismillió sort kiköpnie magából csak azért, hogy utána a rendszer boldogan kidobja a szemétbe.
- A hozzászóláshoz be kell jelentkezni
Akkor marad
yes | sed '/y/!d;q'
??? Bár ilyenkor az errorlevel értéke nem állítódik be, viszont tuti gyorsabb az egyiknél (persze annyiban eltér, hogy egy talált sort kiír).
ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne
- A hozzászóláshoz be kell jelentkezni
Nyilvan azert van ott a head, hogy a grep is ki tudjon lepni, ugyanis a head az adott n darab sor olvasasa utan egyszeruen lezarja a pipe-t es kilep, a masik program meg ott rohadjon el, ahol van.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
módosítok: grep -q 'minta' kilép első találat esetén!!!
az én grep-pem hardy alatt:
yes | grep y >/dev/null ; echo Kilép
nem kép ki, míg:
yes | grep -q y ; echo Kilép
Kilép
ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne
- A hozzászóláshoz be kell jelentkezni
Hogy is fogalmazzak... Szóval az első megjegyzésben nem tudok igazat adni neked, a -q POSIX opció, és by design első találat után exit(0)-lal kilép: http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html
Az persze lehet, hogy egy-két grep-variáns nem POSIX-konform, de nekem a GNU grep 2.5.3 ebből a szempontból korrekten működik.
- A hozzászóláshoz be kell jelentkezni
Ezért kezdtem így: *vélemény*. A fene se olvasott hozzá posix-szabványt, hogy ez kiderüljön :-)
- A hozzászóláshoz be kell jelentkezni
Nálam...:
$ man grep
...
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit
immediately with zero status if any match is found, even if an
error was detected. Also see the -s or --no-messages option.
(-q is specified by POSIX.)
-s, --no-messages
Suppress error messages about nonexistent or unreadable files.
Portability note: unlike GNU grep, 7th Edition Unix grep did not
conform to POSIX, because it lacked -q and its -s option behaved
like GNU grep's -q option. USG-style grep also lacked -q but
its -s option behaved like GNU grep. Portable shell scripts
should avoid both -q and -s and should redirect standard and
error output to /dev/null instead. (-s is specified by POSIX.)
...
$ grep -V
GNU grep 2.5.3
Copyright (C) 1988, 1992-2002, 2004, 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Ez nem jelenti azt, hogy mindenütt, de vélelmezem, hogy a gnu grep így működik -- az más kérdés, hogy a manpage szerint sem igazán portábilis a dolog -- sajnos.
- A hozzászóláshoz be kell jelentkezni
A következőt szeretném megoldani: Adott egy könyvtár több alkönyvtárral és sok fájlal. Na most nekem kellene egy másolat elről de csak a könyvtárakkal, vagyis a fájlok nem kellenek. A legjobb az lenne hogyha azt is meg lehetne adni, hogy csak bizonyos mélységig lépjen be a könyvtárszerkezetbe a script.
find type és maxdept-el kitudom listázni az érintett könyvtárakat de hogy másolom őket, hogy ne húzzák magukkal a bennük lévő fájlokat is?
- A hozzászóláshoz be kell jelentkezni
ne másolj hanem hozz létre
pl bash pseudóban:
for i in `find -type d`; do mkdir $i; done
- A hozzászóláshoz be kell jelentkezni
A gond az, hogy a jogosultsagok is kellenenek.
- A hozzászóláshoz be kell jelentkezni
Ha más nem áll elő szebb és egyszerűbb ötlettel, akkor használhatod a find mellett a tart:
find . -type d | xargs tar rf /tmp/dirs.tar --no-recursion
Majd pedig:
tar xf /tmp/dirs.tar -C /az/uj/konyvtar
- A hozzászóláshoz be kell jelentkezni
Köszönöm
- A hozzászóláshoz be kell jelentkezni
find . -type d | pax -r -w celkonyvtar
find . -type d | cpio -plumd celkonyvtar
kicsit egyszerűbb megoldások.
- A hozzászóláshoz be kell jelentkezni
KALAPEMELÉS ON
Régi sejtésem, hogy az egyik leggyakorlottabb szkriptíró vagy errefelé, ezzel a paxszal beigazolódni látszik. :)
- A hozzászóláshoz be kell jelentkezni
Az bizony :-)
- A hozzászóláshoz be kell jelentkezni
lx: köszönöm
zeller: nyelvet vissza! Különben is, awk-ban rendszeresen elversz :-)
- A hozzászóláshoz be kell jelentkezni
Megbeszéltük :) Az awk-t szeretem, és talán tudom is használni, de *sh-ban kvázi bármikor lehet tőled újat tanulni, úgyhogy max. döntetlenben egyezhetünk ki :)
- A hozzászóláshoz be kell jelentkezni
Ha előző ötletnél maradnál, akkor chmod --reference=$i
(pl. kellemetlenül elbonyolított megoldással:
for i in `find ./ -type d | sed 's/.\///'`;do mkdir /celkonyvtar/$i;chmod --reference=$i /celkonyvtar/$i;done
)
- A hozzászóláshoz be kell jelentkezni
Ebben az esetben pont nem kell sed, ugyanis a mkdir /ize/hoze az pont ugyanaz, mint az mkdir /ize/./hoze
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Igaz.
(Valami bonyolultabb példával játszottam épp ahol az aktuális könyvtárhivatkozásból is egy másik könyvtárnevet kellett csinálni, ezt írtam csak át hirtelen sed-del eltüntetősre.)
- A hozzászóláshoz be kell jelentkezni
Szevasztok,
az a gondom, hogy 001.jpg - 999.jpg -ig kellene file-okat elneveznem, de ha a let "n = n + 1" -et használom a ciklusban, akkor a 00-kat lecsapja a számból (miért ne csapná). Hogy tudom rákényszeríteni, hogy 001, 002, 003 stb neveket kapjak?
Köszi,
G
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
köszi, a padding kifejezés nem volt meg :)
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Van egy egyszerű kis scriptem ami egy betű tartományon végiggyalogolva csinál valamit:
#!/bin/bash
echo -n "Source disk? (example: sda) "
read src
echo -n "Destination disks? (example: a..b) "
read des
for i in {b..f}
do
sfdisk -d /dev/$src |sfdisk -f /dev/sd$i
done
A probléma az, hogy a {b..f} helyére szeretném a $des -t betenni, de némi fórumozás és teszt után úgy látom ez nem ilyen egyszerű. Szóval hogyan lehetne megoldani, hogy a for ciklus egy változóban meghatározott betű tartományon dolgozzon?
Köszi, Mik
- A hozzászóláshoz be kell jelentkezni
Egyszerűen:
for i in $(eval echo "{$des}")
do
...
- A hozzászóláshoz be kell jelentkezni
Köszi!
- A hozzászóláshoz be kell jelentkezni