Új hozzászólás Aktív témák
-
-
CPT.Pirk
Jómunkásember
Még egyszer, elvileg utoljára kérnék egy apró segítséget. Szeretnék egy egyszerű, állapotjelzőt csinálni a lenti, már ismert kódhoz. Most úgy van, hogy 1 másodpercenként érkezik adat, mikor ez megtörténik, akkor szeretnék egy karaktert kiírni a képernyőre.
[#### ]
Valami ilyen totál egyszerű formában, zárójelek se kellenek.
NR<43 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>43 { exit 0; }
END{
for(i=1;i<43;i++) if(a[i] > 0) printf ("%4.3f,%d,%d,%d,%4.3f\n",20*(log(a[i]/4095)/log(10.0)), i, a[i], b[i], ((a[i] + a[i+2$
}Egyébként szépen működik a kód és vele együtt a komplett Wobbler szkóp is. Ezúton is köszönöm a segítséget mindenkinek.
[ Szerkesztve ]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
válasz CPT.Pirk #1103 üzenetére
az NR<43 sorba rakj egy printf("#"); utasígást, az END blokk elejére meg egy printf("\n");-t
a zárójeleket is ki lehetne találni úgy, hogy csinálsz az elejére begin blokkot, ott kiiratod, de a pontos vezérlőkarakterekre nem emlékszem fejből (ami csak carriage return-t csinál, line feedet nem), valahogy így:
BEGIN { printf ("[ ]\r["); }
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
CPT.Pirk
Jómunkásember
válasz bambano #1104 üzenetére
Most mérges vagyok, mert megint egy hót egyszerű dolgot kérdeztem meg, ami rá kellett volna jönnöm!
Am. a végére már nem tettem ki a ] jelet, mert akkor a bash csinál egy cleart, és lefut a gnuplot, valamint a cowsay közli, hogy a mérés befejezve. Le is videóztam az egészet: [link]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
lapa
veterán
aix alá kéne nekem valami "iostat szépenoszloponként-fájlbarendszeresenmentő" izéke. van valakinek ilyesmire ötlete?
-
-
lapa
veterán
top-ot hogyan tudok kiírni fileba? ez aixon topas, de elég sok a krikszkraksz karakter benne, ha csak fájlba irányítom. de ugyanez van topnál is. pedig mostmár eldöntöttem, hogy csak ezt a topas kimenetet menteném-dolgoznám fel, nagyon kis alapos.
-
lapa
veterán
na továbbra is csak a szenvedés megy. most elhoztam kézi ssh-val a topas kimenetét linuxra. tudom, hogy nem scriptelés, de ha már itt kezdtem el:
szóval ssh aix --> topas
ez kirakja nekem gnome-terminalban a topast. erről a kimenetről szeretnék egy 1:1 mentést minden változáskor. eddig gugliztam meg állítgattam de nem sikerült. pedig nagyon kéne még a hétvége előtt.
-
Jim-Y
veterán
Sziasztok, olyan commandot kéne írnom, ami egy fileból, ami apache-szerű logfile-t tartalmaz, meg kéne számolnom az egyik, pontosan a 3. property-k különbözőségeit.
Magyarul : van egy file, amiben apache logfile van, egy sor egy kérés. Nekem soronként a 3. mező-t kéne vizsgálnom, a mezők szóközzel vannak elválasztva. Meg kéne számolnom, hogy egy filbean, ezen 3. mező hány különböző értéket tartalmaz. Valami ötlet? üdv
-
Jim-Y
veterán
válasz Jester01 #1115 üzenetére
köszi a gyors választ, ez most azt csinálta, hogy egy 1000 soros inputnál kiírta hogy 999 ..
tehát az hiányzik még, hogy a különböző értékek számát írja ki:S De amugy 1000
Áá, nem tudok fogalmazni, szerintem csak én fogalmaztam meg rosszul a kérdést, magyarul
input file:mező1 mező2 mező3 ... mezőN
mező1 mező2 mező3 ... mezőN
...
mező1 mező2 mező3 ... mezőNegy ilyenben kéne megszámolnom, hogy hány különböző mező3 érték van.
[ Szerkesztve ]
-
Jim-Y
veterán
Sziasztok, lenne megint egy kérdésem, most azt kéne megcsinálnom, hogy van ugyanaz a fájlom mint tegnap, az apachelog, és az ötödik fieldet össze kéne mergelnem a harmadik fielddel, és az ötödiket törölni
Tehát, input:
mezo1 mezo2 mezo3 mezo4 mezo5 ... mezo13
mezo1 mezo2 mezo3 mezo4 mezo5 ... mezo13
...
mezo1 mezo2 mezo3 mezo4 mezo5 ... mezo13Output:
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13
...
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13Próbálkozni persze próbálkoztam, de rossz eredményt kaptam sajnos, íme:
#!/bin/sh
awk '{print $1" "$2" "($3+"_"+$5)" "$4" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13}' head.txt > res.txtDe sajnos ez hülyeséget írt ki:/ Ötlet?
-
-
ngabor2
nagyúr
van kb. 50GB-nyi fénykép, 7 év termése. ezek egy könyvtárrendszerben vannak szépen rendezve. a felbontásuk általában elég nagy, 2-16 Mpixeles képek, vegyesen. álló és fekvő tájolás, szintén vegyesen.
ezeket kellene 1024x768-ra, vagy fekvő esetben 768x1024-re konvertálni. van pár kivágott kép is, aminek nem 4:3 az aránya, az így járt, ha bonyolult értelmesre átméretezni. itt adtam fel a küzdelmet...
sima rekurzív átméretezésre találtam megoldást, de a mennyiség miatt vagy xargs kellene hozzá, amihez nem konyítok, vagy először egy listába kiírni a fileneveket útvonallal. ez utóbbi, bár fapadosabb, nekem szimpatikusabb lett volna.
-
-
Jester01
veterán
válasz ngabor2 #1122 üzenetére
Imagemagick tudja, hogy aránytartóan átmeretez úgy, hogy 1024x1024-be beleférjen. Kb. annyi az egész, hogy:
find . -type f | while read file; do mkdir -p "../out/${file%/*}" && convert -verbose "$file" -resize '1024>x1024>' "../out/$file"; done
Abba a részfába írni amit a find éppen feldolgoz nem éppen életbiztosítás, ezért én itt inkább egy feljebb lévő out directoryba írok.
A file listára szétszedés innen már triviális (akkor persze már lehet ugyanoda pakolni a kimenetet).Jester
-
-
Jester01
veterán
-
-
-
-
ngabor2
nagyúr
válasz bambano #1125 üzenetére
a képek között akad pár videó, amit értelemszerűen nem kell/lehet átméretezni, viszont nem ártana átmásolni a célmappába. tehát akkor a feladat finomodott: ami kép, átméretezni, ami nem kép, átmásolni.
a képek mind jpegek, igaz, van kis és nagybetűs is. kiterjesztés szerint *.[jJ][pP][gG] (asszem jpeg kiterjesztésű nincs, hisz fényképek, a gép meg 3 betűt ad neki.)
[ Szerkesztve ]
-
sonar
addikt
Hi,
Kicsit belegabalyodtam a Bash-be.
Hogyan tudok * -ot kiirni egy file-ba?
Már mindenféle képpen próbáltam, de eddig nem sikerült.A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
-
lécci súgjatok: shellből hívom postgrest, egy select utasítást használok.
Ennek a selectnek egy számot kellene visszaadnia, ha van a keresési feltételnek megfelelő érték, vagy 0-t, ha nincs. A gondom az, hogyha nincs, akkor üres halmazt ad, nem NULL-t.Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
cAby
tag
Sziasztok!
Elakadtam egy dolognál és szeretnék segítséget kérni.
Azt szeretném megcsinálni, hogy egy adott könyvtárban lévő összes txt fájl egy sorában szereplő számot össze szeretném adni.
Tehát:valami.txt tartalma:
Osszes tabla szama = 122
valami2.txt tartalma:
Osszes tabla szama = 10Es akkor ezt a 122-t és 10-et kéne összeadni.
Ilyenre gondoltam, de nem tudom kivitelezni:
sum=0
for i in <txt fájlok elérési útjai>
do
let sum=sum+`grep "Osszes tabla szama" $i | awk '{ print $5 }'`
doneAz is megvan, hogy az összes txt fájlt így keresem ki:
find /EbbenA/Mappaban/ -name *.txtCsak már ott hibázik, hogy a find parancs egymás alá adja vissza az elérési utakat, és úgy a for ciklusnál nem lehet megadni listának, ha jól gondolom.
Tehát ezzel a paranccsal remekül kivágja a fájlból az értéket:
grep "Osszes tabla szama" valami.txt | awk '{ print $5 }'
csak egyszerűen nem jövök rá, hogyan kellene ezt ciklusban megcsinálni és összeadogatni az értékeket.Megköszönném, ha valaki tudna ötleted adni, hogyan is kellene nekiállnom.
köszi,
Csabi[ Szerkesztve ]
-
cAby
tag
(Lecsúsztam a szerkesztésről.)
Azonban valamivel javítottam a dolgon:
sum_records=0
for i in `grep "Osszes tabla szama" /mappa/valami.txt | awk '{ print $5 }'` `grep "Osszes tabla szama" /mappa/valami2.txt | awk '{ print $5 }'`
do
let sum_records=sum_records+$i
done
echo $sum_recordsÍgy remekül összeadj a dolgokat.
Tehát már "csak" annyi kellene, hogy a find eredményét átalakítsam a for ciklus feltételénél található alakba.Ha valakinek van ötlete, akkor kérem segítsen. Köszönöm
-
-
for ciklusnak is meg lehet adni, csak ott azt kockáztatod, hogyha sok fájl van, akkor nem fog beférni a bash puffereibe.
tehát lehet ilyet, hogy:
for i in $( find /EbbenA/Mappaban/ -name *.txt ); do
...
donevagy lehet while ciklussal:
find /EbbenA/Mappaban/ -name *.txt | while read filenev; dogrep ... $filenev
done
ha már beforkoltál egy awk-ot, akkor használhatod összeadásra is:
find ... | while read filenev; do
grep "Összes .." $filenev
done | awk '{ sum = sum + $5 } END {print sum}'ezeket fejből írtam, nem teszteltem, de el tudsz indulni vele. Jester01 megoldása is jó (szokás szerint) csak van benne egy-két csillagháborús ötlet is, amit elsőre nem fogsz megérteni Amiket én írtam, azok meg a faék egyszerű megoldások, viszont van bennük erőforrás pazarlás.
pl. sok grepet forkol. ahelyett jobb lenne egy find ... | xargs grep "Összes ..."| awk megoldás.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
Jester01
veterán
Ha feltételezzük, hogy nincs túl sok fájl akkor ennyivel is meg lehet úszni az egészet:
awk '/Osszes tabla szama/ { sum = sum + $5 } END {print sum}' *.txt
Jester
-
cAby
tag
Koszonom szepen Nektek a gyors segitseget!
Ha hazaertem, akkor megprobalom megerteni a leirtakat es osszehozni a script-et.
-
cAby
tag
válasz Jester01 #1142 üzenetére
Szia!
Végülis addig-addig csináltam, amíg összejött for ciklusos megoldással.
Az első megoládsra amit írtál, még további időt rá kell fordítani, hogy megértsem. Gondolom ahhoz már nagy tudás kell.Ez az awk-os is működik, viszont, ha mappa elérési utat is akarok írni, akkor nem megy, ill. változónak sem tudom valamiért átadni az értéket.
Ez kiidegel és több ötletem nincs erre.Próbáltam így pl., hogy:
parancs=`awk '/Osszes tabla szama/ { sum = sum + $5 } END { print sum }' /home/user/adatok/*.txt`Gondolom itt a `,'," jelekkel kellene játszani, de nem jövök rá sehogy sem a helyes megoldásra.
Ez azért is kellene, mert kétféle kiterjesztésnél kellene ezt eljátszani, tehát végig kellene nézni *.txt-ket és *.txt-20121014 (tehát különböző dátum van odaírva a txt-k mögé) kiterjesztésű fájlokat.
Úgy gondoltam, hogy külön, külön változóba lementem, majd akkor ki lehet külön is íratni, ill. egyben is.Ebben még tudnál segíteni kérlek, hogyan is kellene?
Ill. írtad, hogy akkor jó, ha nics sok fájl. Ez mennyi fájlt takar?Köszönöm előre is!
-
a fordított aposztróf bár helyes, deprecated, javasolt átszokni a $( ) formára.
a többi kérdésedet kifejtenéd részletesebben?
"Ill. írtad, hogy akkor jó, ha nics sok fájl. Ez mennyi fájlt takar?": ez régebben kernel fordítási paraméter volt és 128k volt a mérete, hogy most van-e ilyen korlát és mennyi, nem tudom. tehát a paranccsori paraméterek karakterben számolt összmérete nem lehetett több, mint 128k. 128 betűs fájlnevek esetén 1000 fájl.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
cAby
tag
válasz bambano #1145 üzenetére
Ohh, lényegében minden kérdésemre megkaptam így a választ, hogy a $( ) formátumot használtam.
Azonban így előjött egy nem várt dolog.Akkor ez a parancs nekem bőven jó lesz, mert kevesebb, mint 200 fájlról van szó.
Parancs:
summa=$(awk '/Osszes tabla szama/ { sum = sum + $4 } END { print sum }' /home/user/adatok/*.txtProbléma:
Így kizárólag a /home/user/adatok mappában lévő txt fájlokat nézi, ha az 'adatok' mappában létrehozok egy 'tovabbiadatok' almappát és abban is elhelyezek txt fájlokat, akkor azokat már nem vizsgálja.
Ezt nem lehet beparaméterezni valahogyan?Köszönöm szépen a gyors segítséget!
-
-
cAby
tag
@Jester01, @bambano:
Köszönöm szépen mindkettőtöknek. Mindkét megoldás tökéletesen működik, épp úgy ahogy szeretném.