Elvolvasod a "line addressing" részt az ed leírásában
Lásd kivel van dolgod: a \$ helyére lehet tetszőleges sorszámot írni.
Jester
Elvolvasod a "line addressing" részt az ed leírásában
Lásd kivel van dolgod: a \$ helyére lehet tetszőleges sorszámot írni.
Jester
"Tanár úr kérem,
Elvolvastam a "line addressing" részt az ed leírásában...
De ez többet segített:
"Lásd kivel van dolgod: a \$ helyére lehet tetszőleges sorszámot írni."
Az elmúlt 40 évben, sajnos nem látogattam óráit. Majd igyekszem bepótolni."
Aki otthon van a reguláris kifejezésekben és szívesen segítene az dobjon már egy privit nekem.
Köszönöm!
🚗 FORD - First On Race Day 🚗
Sziasztok!
Olyan kérdésem lenne, hogy adott adat nevű fájl, melyben az alábbi minta szerint vannak adatok:
1.,Balogh Elvira,hölgy,1988.06.02.,Sárospatak,85000
A következő a feladat: Melyik napon született a legtöbb úr? Listázzuk az egyes napok sorszámát, és az akkor született urak számát, darabszám szerint növekvő sorrendben.
A megoldásom a következő:
sort -t, -rk5 adat | awk -F, '($3=="úr") { print $4 }' | uniq -c | awk ' { print $2"\t"$1 }' | sort
Nos, ezzel az a baj, hogy a teljes évszámot kategorizálja, és kiírja például, hogy 1965.08.25-én 1 úr született. Nekem pedig csak napokra lebontva kellene a megoldás. Ha valaki tudna segíteni benne, akkor azt nagyon megköszönném!
a substr függvénnyel levághatod az évszámot a születési mezőből, valahogy így
print substr($4,6,5)
szerk: ugye a példád nem létező személyi adatokat tartalmaz?
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ezzel most hónapokra kategorizálta, szóval pl.: 12.01-én 1 úr született.
Valószínűleg nem. Iskolai feladat, nem én csináltam.
[ Szerkesztve ]
Na az alábbi paranccsal sikerült eljutnom odáig, hogy levágja az évet és a hónapot:
sort -t, -rk5 adat | awk -F, '($3=="úr") { print substr($4,9,3) }' | uniq -c | awk ' { print $2"\t"$1 }' | sort
Viszont még mindig van két problémám, az egyik, hogy ettől függetlenül még mindig teljes dátum szerint csoportosít, nem napok szerint, a másik, pedig, hogy dátum szerint rendezi sorba, és nem darabszám szerint.
ha az utolsó awk-ban a $2-t és a $1-et felcseréled, akkor már jól fog rendezni.
azt hogy érted, hogy teljes dátum szerint csoportosít?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ha már shell script topik akkor itt a szokásos megoldásom is
#! /bin/bash
declare -A stats
maxcount=0
while read line
do
tmp=${line#*,*,}
if [ "${tmp:0:2}" != "úr" ]
then
continue
fi
tmp=${tmp#*.*.}
day=${tmp:0:2}
if [ -z "${stats[$day]}" ]
then
count=1
else
count=$((stats[$day] + 1))
fi
stats[$day]=$count
if [[ $count > $maxcount ]]
then
maxcount=$count
maxday=$day
fi
done
echo "$maxday ($maxcount)"
[ Szerkesztve ]
Jester
Úgy, hogy kiírja például, hogy:
31. 1 db
31. 1
31. 2
31. 1
Szóval nem csoportosítja pl. itt úgy, hogy 31. 5. Gondolom én, hogy attól még, hogy én csak a napokat látom, attól még a dátum levágott részét is figyelembe veszi a csoportok létrehozásánál.
ezt azért csinálja, mert minden hónapban lehet 12.-e. ezt úgy tudod megjavítani, ha a uniq -c elé közvetlenül is teszel egy sort-ot.
szerk: "Gondolom én, hogy attól még, hogy én csak a napokat látom, attól még a dátum levágott részét is figyelembe veszi a csoportok létrehozásánál.": nem, nem veheti figyelembe, mert az nincs ott.
az ok az, hogy a uniq csak akkor tudja korrekten összeszámolni a sorokat, ha azok egybefüggően, egymás után vannak. viszont:
dátum levágott dátum
1988.05.12 12
1988.05.20 20
1988.06.12 12
ez lesz belőle, ezt a uniq nem tudja összeszámolni, mert nem tárolja el az egész fájlt, csak az éppen feldolgozott plusz az előtte levő sort.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
az ilyen != úr continue stílusért rendes helyen buktatnak
szerk: jóhogy nem már goto
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
szerintem a megoldás:
grep ',úr,' adat| cut -d, -f 4| cut -d. -f 3 | sort | uniq -c | sort -n| tail -1
vagy valami ilyesmi, teszt nélkül
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Rendes helyen az orruknál tovább látnak az emberek és belátják, hogy a túlzott egymásbaágyazás kerülendő és semmi baj nincs se a continue-val se az ésszerű goto-val (példának okáért lásd még azt a százezer darabot ami a linux kernelben van).
Jester
Sikerült megoldani, köszönöm a segítséget. Egyébként így néz ki a megfejtésem:
sort -t, -rk5 adat | awk -F, '($3=="úr") { print substr($4,9,3) }' | sort | uniq -c | awk ' { print $2"\t"$1 }' | sort -n -k2
biztos, hogy az első sort kell bele?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ezen én is gondolkodtam így utólag, de ha már találtam egy jó megoldást, akkor már jó.
Sziasztok,
ptc-zek s szeretném a reff-ek átlagát kiszámolni. Odáig eljutottam, hogy a .htm-ből megkapjam a sorokat:
Egy részlet, hogy néz ki:
....
17 [R781153008 ] 2014/05/27 at 22 days and 2014/05/ 7 1.000 [recycle] [info-r] [ ]
00:31 21:14 28
18 [R3325737139 ] 2014/05/27 at 22 days and Yesterday 7 1.000 [recycle] [info-r] [ ]
00:31 21:14
19 [R2656436594 ] 2014/05/27 at 22 days and 2014/05/ 4 0.571 [recycle] [info-r] [ ]
00:31 21:14 27
20 [R1966968045 ] 2014/05/23 at 17 days and 2014/05/ 2 0.182 [recycle] [info-r] [ ]
A tizedesjegyű-számokat szeretném szűrni, de elakadtam:
grep -o [0-9].[0-9][0-9][0-9]
eredmény:
1.000
33257
37139
1.000
26564
36594
0.571
19669
68045
0.182
A pontot nem kell escape-elni? Mert anelkul azt jelenti, hogy barmely karakter, egyszer (vagy valami hasnolo remlik )
igazad van
grep -o '[0-9]\.[0-9][0-9][0-9]'
3.133
2.933
3.600
1.867
0.800
....
Most már csak az oszlopban szereplő számok átlagát kellene kiszámolni....
Hmmm...de hogyan.... bc vagy talán awk??
awk-val az egész:
awk '
{
if (match($0, "[0-9]\\.[0-9][0-9][0-9]") == 0) next;
count += 1;
sum += substr($0, RSTART, RLENGTH);
}
END { print sum / count }
'
Jester
Sziasztok,
Indítottam egy kis házi szerverecskét ubuntu alapokon.
Regisztráltam egy dns szerverre, és most ddclient végzi az ip frissítését.
Az vele a gondom, hogy a ddclient 300s-ként (5 perc) végzi ezt el.
Nekem a 100%-os elérhetőség lenne a cél. Volt rá példa hogy 4 óra alatt 3× váltott ip-t a szolgáltató.
Lehet olyan script-et írni amivel pingelem a dns címem 5s-ként, majd ha nem érkezik rá válasz 3s alatt akkor restartolja a ddclientet?
Restartkor ugye rögtön frissíti az ip-t.
Ha lehet akkor tudna benne segíteni valaki? Kezdő vagyok linuxból.
Köszi előre is a válaszokat.
lehet, csak semmi értelme. a dns rendszer nem fog attól frissülni, hogy te újraindítod a ddns scriptedet.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Próbáltam, mikor újraindítottam a ddclientet akkor rögtön aktualizálta az ip-m. Persze kétszer egymásután nem, de ha az ip cserék (router restart) között eltelt egy 10-20 perc akkor már rögtön frissítette.
Jester, köszi szépen az awk-s megoldást. Szuper!
Van egy file, amiben egy oszlopban vannak a számok. Valahogy így:
0.2121
1.21
3.423
1.23
Nekem így kellene:
0.2121 1.21 3.423 1.23
Egy sorba, s az elválasztás köztük egy tabulátor legyen.
Azért próbálkoztam....pl.:
sed -i 's/\n/\t/' file
ls -l | tr '\n' '\t'
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ha mindenképp sed-el kell: ':a;N;$!ba;s/\n/\t/g'
You may corrupt the souls of men, but I am steel. I am doom.
Vagy paste -s
[ Szerkesztve ]
Jester
Végül is a "tr"-es megoldás lett:
cat file | tr '\n' '\t'
Egyébb:
- a "sleep" parancs mire jó, mikor használjuk?
- az awk-s parancsnál fent (#1771) beillesztettem script-be, s az lenne a kérdésem, hogy nem lehet-e azt megformázni; sor elejére igazítani (v. egy sorba az egész)?
fork bombáért körmös jár
tr '\n' '\t' file.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Gondoltam…
Próbáltam, de nem történik semmi. Ctrl+C-vel kell kilépnem.
tr '\n' '\t' abc_2
v. a "paste -s" lesz a jó
jééé, ilyet még nem láttam, hogy szabványos bemenetről megy, argumentumként meg nem...bocs.
akkor tr ... <file
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Nem tudom mit csinálok rosszul!?
ez sem jó:
tr '\n' '\t' < abc
a file-vel nem csinál semmit, csak a terminálba írja
Sziasztok!
Felmerült egy olyan "igény", hogy dinamikusan tudjam állitani a hálózat proxy részét. Cégen belül proxy-t kell használni, de amikor nincs rá szükségem, akkor ki kell kapcsolni. Ezt ugye meg csak úgy tudom, ha kikommtezem a környezeti változót és újrainditom a gépet. Ehhez keresnék megoldást. Jelenleg saját proxy-val van megoldva.
Innen indult az egész.
#200012 bambano:
a /etc/profile-t minden login shell végrehajtja, tehát azt látni fogja mindenki, aktuális helyzet szerint.
Nekem elég ha a saját user és a root használja ezeket a proxy beállitásokat, a legnagyobb bajom ezzel ugye a ki-belépés. Minden programot bezárni, kilépni, belépni. Főleg ha melózok épp valamin.
Ha a saját helyemen ülök, akkor kell a proxy, de ha már wifi-zek, akkor nincs rá szükség, mert olyankor inkább csak jegyzetelek, vagy neten mutatom be, mit csináltam.
Olyan lenne a legjobb, ami dinamikusan állitja a proxy változókat. Legyen akár valami tigger, hálózati ip alapján, vagy akár egy parancsikon az asztalon.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
még mindig azt tartom legegyszerűbbnek, hogy legyártod az apt konfigját két példányban, és írsz egy scriptet, ami cseréli. A scriptet az ip-up.d könyvtárba kell tenni, akkor minden esetben végrehajtódik, amikor felhúzza az interfészt.
ha megmondod, mi a különbség a céges net és az otthoni között, akkor meg lehet faragni a scriptet, ami meg tudja különböztetni a kettőt.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Az apt a legkevesebb, mert az át tudom írni futás időben is. 1 sor komment.
Igazából az ip tartomány a különbség a 2 környezet között, nekem a sidewide környezeti változó lenne a fontos, hogy kilépés nélkül is tudjak cserélni http_proxy és a https_proxy változókat.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Ezt most találtam:
:(){ :|: & };:
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
válasz bob.zxr hozzászólására:
egyik sem működik sajnos
az elsőre az output:
/home/pi/test/logs_..zip
szerk: ez működik, elgépeltem, bocsi
a második abból a könyvtárból szépen lefut, nem is rakja bele a felesleges könyvtárakat, de ha máshonnan akarom futtatni akkor ezt dobja:
zip warning: name not matched: ./logs
zip error: Nothing to do! (try: zip -r -b /home/pi/test/ /home/pi/test/logs_device00.zip . -i ./logs)
[ Szerkesztve ]
Azt elnéztem, csak adott könyvtárban működik. Mindenképpen kell a log mappa vagy elég ha csak a fájlok vannak belőle? (értsd: a zip fájlban egyből a fájlok vannak mindenféle mappa nélkül)
Mert akkor így:
/usr/bin/zip -rj /home/pi/test/logs_$HOSTNAME.zip /home/pi/test/logs/*
[ Szerkesztve ]
You may corrupt the souls of men, but I am steel. I am doom.
az nem lenne baj ha log mappa nem lenne, de az alá be van ágyazva egy egész $year/$month/$day mappaszerkezet, és azokra mindenképpen szükségem lenne.
Írj az eredeti javaslatom elé egy cd /home/pi/test/ -et és akkor jó lesz.
Tehát:
cd /home/pi/test/
/usr/bin/zip -r /home/pi/test/logs_$HOSTNAME.zip -b /home/pi/test/ ./logs
[ Szerkesztve ]
You may corrupt the souls of men, but I am steel. I am doom.
működik, nagyon szépen köszönöm!
Sziasztok!
Ide is belinkelem, hátha itt is tudnak okosat mondani: http://prohardver.hu/tema/linux_abszolut_kezdoknek/hsz_27514-27514.html
Üdv, köszi
find konyvtar -name filenevek | xargs grep string
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Sziasztok!
A probléma a következő: Van egy fájl szerkezetem, amiben elszórva vannak txt fájlok. Minden txt fájl tartalmaz egy időpontot(hányadik nap a héten / hányadik óra) és egy olyan keresést szeretnék végrehajtani, hogy a futtatás pillanatában megvizsgálom, hogy épp a hét hányadik napja van, hányadik órában vagyunk, majd végig menni az összes txt-n és ha egyezés van az ottani időponttal, akkor végrehajtani néhány parancsot a txt-ben szereplő egyéb paraméterek alapján, majd folytatni a keresést, hogy van-e még időpont egyezés a többi txt-ben.
Ha csak egy txt van a fájlszerkezetben akkor sikerült az alábbi kóddal működtetni:
#!/bin/bash
actday=$(date +"%u")
acthour=$(date +"%k")
fileday=$(cat /root/autoscan/objects/*/*/*.txt | sed -n '3p')
filehour=$(cat /root/autoscan/objects/*/*/*.txt | sed -n '5p')
if [ $actday -eq $fileday ]
then
echo "egyezik"
fi
Azonban nem tudom, több találat esetén, hogyan lehet egy találatot követően felfüggeszteni a keresést, megcsinálni a txt alapján a szükséges műveleteket, majd ha megvagyok tovább folytatni a keresést.
Minden javaslatot hálásan köszönök!
find + ciklus
#!/bin/bash
actday=$(date +"%u")
acthour=$(date +"%k")
find /root/autoscan/objects -type f -name \*.txt |
while read file
do
fileday=$(sed -n 3p "$file")
filehour=$(sed -n 5p "$file")
if [ $actday -eq $fileday ]
then
echo "egyezik"
# tovabbi tennivalok itt
fi
done
Jester
Köszi szépen, műxik!
Hogy lehet egy szkriptben "elrejteni" egy fájlt? Tehát egy nagyobb fájl tartalmazzon mindent, a részeket utána kirakom pl.: /tmp-be és onnan dolgozik tovább vele.
Vigyázat, csalok!
például úgy, hogy base64-gyel átkódolod tiszta ascii-ra, azt berakod a scriptbe, és here-documenttel dekódolod.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis