- Honor Magic6 Pro - kör közepén számok
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Hívószám-hamisítás
- Magisk
- One mobilszolgáltatások
- iPhone topik
- Íme az új Android Auto!
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Szívós, szép és kitartó az új OnePlus óra
- Samsung Galaxy Fit 3 - keveset, de jól
Új hozzászólás Aktív témák
-
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. -
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
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!
-
cAby
tag
Koszonom szepen Nektek a gyors segitseget!
Ha hazaertem, akkor megprobalom megerteni a leirtakat es osszehozni a script-et.
-
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
-
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 -
cAby
tag
válasz
Jester01 #958 üzenetére
Áhh értem, köszi a felvilágosítást. Maradok az előbbi megoldásnál inkább.
Már ki is tudtam sed-el szedni ami nem kell oda:
sed -e "s/Cpu(s): //" | sed -e "s/%us,//" | sed -e "s/%sy,//" | sed -e "s/%ni,//" | sed -e "s/%id,//" | sed -e "s/%wa,//" | sed -e "s/%hi,//" | sed -e "s/%si,//" | sed -e "s/%st//"
De csak úgy működik, ha előbb az eredményt elmentem egy cpu.txt-be
aztán az elejére írom, hogy cat cpu.txt | sed .... és így elmentem egy másikba.De így nem, hogy:
top -b -d 1| while read p; do echo $(date +"%T") $p; done | grep Cpu | sed -e "s/Cpu(s): //" | sed -e "s/%us,//" | sed -e "s/%sy,//" | sed -e "s/%ni,//" | sed -e "s/%id,//" | sed -e "s/%wa,//" | sed -e "s/%hi,//" | sed -e "s/%si,//" | sed -e "s/%st//"Ilyet nem lehet, hogy egyből így mentse le? :\
-
cAby
tag
válasz
Jester01 #955 üzenetére
Megnéztem akkor amikor mondtad, de egy ilyennel találtam szemben magam:
cpu 199957490 1300639 49153374 7781071864 207319963 25528 845323 0 0Fogalmam sincs mit jelentenek ezek a számok, ill. hogyan formázzam, hogyan kapjak ebből %-os értéket.
Ezért akartam mással megoldani.
De ez a megoldás, amit bambano írt jó lesz. Ha meg ki tudom sed-el szedni ami nem kell oda, akkor tökéletes lesz nekem.
Elhiszem, hogy a másik szebb megoldás lenne, de sajnos nem értek ilyen szinten a dolgokhoz.
-
cAby
tag
Hmm.. tényleg, elő is kaptam régi jegyzeteimet és megtudtam, hogy cat akarmi | sed s/eztcsereld/emerre/ a parancs.
Neki is ugrottam, de nem jön össze eddig még
Ez egy sor:
02:02:38 Cpu(s): 16.8%us, 13.7%sy, 0.0%ni, 7.6%id, 62.0%wa, 0.0%hi, 0.0%si, 0.0%stTehát, le akarom cserélni a "%us, " (szóköz is van) egy szóközre, ugyan így a többi, kiv a %st, mert ott azt csak törölni kellene.
A szóközt azt hogyan kellene jelölni?
Eddig ez votl a próbám, amivel csúnyán megbuktam.
top -b -d 1| while read p; do echo $(date +"%T") $p; done | grep Cpu | sed s / %sy,' ' /' ' -
cAby
tag
Ezt a 2 fogom akkor használni:
nohup iostat -m 1| while read p; do echo $(date) $p; done | grep sde > /tmp/io.txt &
nohup top -b -d 1| while read p; do echo $(date +"%r") $p; done | grep Cpu > /tmp/cpu.txt &Tehát így az eredeti script amit csináltam nem is kell.
Kérdés, hogy a felső 2 parancsot pontosan 1 időben el lehet indítani?
szerk.: Úúú.. a top-os mégsem jó, mert amit kiír az ez:
01:49:48 AM Cpu(s): 7.4%us, 12.0%sy, 0.0%ni, 12.0%id, 68.3%wa, 0.0%hi, 0.3%si, 0.0%st
és így nem tudok statisztikát csinálni. Az értékek mellé nem kellene más, tehát:
7.4%us, helyett csak 7.4 kéne. Ezt gondolom nem lehet kiszedni. :Sszerk.: Lehet, hogy ronda megoldás de Notepad++-ban mentés után replace-szel meg lehet csinálni.
-
cAby
tag
dstat nincs fenn, meg gondolom ott is csak hozzá kellene bűvészkedni a dátumot.
Áhh, ez tökéletesen megy amit írtál. Nagyon szépen köszönöm, sokat segítettél!
Ez alapján átírtam ezt a változatomat:
#!/bin/bash
Timer=0
ENDTIMER=50000
SAVEPLACECPU=/tmp/cpu_report.txt
while [ "$Timer" -ne "$ENDTIMER" ]
do
sleep 1
Timer=`expr $Timer + 1`
sar -u 1 | grep '^[0-9]' | grep 'all' >> "$SAVEPLACECPU"
echo "$Timer meres futott le"
done
exit 0erre: top -b -d 1| while read p; do echo $(date +"%r") $p; done | grep Cpu
Elindítottam mind a kettőt, de azonos időpontban az értékek között kis eltérések vannak..
Ez lehet attól nem, hogy mind a kettő azt írja, hogy pl. 01.38.59 AM,de egyik 01:38:59.001, másik meg 01:38:59.999-ben rögzít?szerk.: Még valami érdekelne, ezt a 2 parancsot, hogyan lehetne elindítani pontosan egy időben? (Lehet, hogy rájövök nemsokára, de inkább megkérdezem.)
nohup iostat -m 1| while read p; do echo $(date) $p; done | grep sde > /tmp/io.txt &
nohup top -b -d 1| while read p; do echo $(date +"%r") $p; done | grep Cpu > /tmp/cpu.txt & -
cAby
tag
Sziasztok!
Kis segítségre lenne szükségem.A következő értéket szeretném lementeni másodpercenként/ütementként:
iostat -m | grep sde , úgy, hogy egy dátumot (date +"%r") minden sor elejére még beszúrjon.Ezt megcsináltam így:
#!/bin/bash
Timer=0
ENDTIMER=50000
SAVEPLACE=/tmp/io_report.txt
while [ "$Timer" -ne "$ENDTIMER" ]
do
sleep 1
Timer=`expr $Timer + 1`
echo `date +"%r"` `iostat -m | grep 'sde'` >> "$SAVEPLACE"
echo "$Timer meres futott le"
done
exit 0Ezt le is menti, csak az a problémám, hogy hibás eredményt ad alapból az iostat -m | grep sde... mert a MB_read/s és wrtn/s szinte azonos értéken (3 és 0.5) áll végig..
Ha parancssorba beírtam így, hogy: nohup iostat -m 1 | grep sde > /tmp/adat.txt , akkor ez szépen lementi percenként az aktuális _helyes_ adatot.
De nem tudok rájönni, hogy ebben a verzióban, hogyan lehetne beszúrni a dátumot minden sor elejére...
Nem muszáj shell script-ben, ha lehet így parancssorosan is valahogy.Ha valaki tudja, akkor legyen olyan jó és segítsen egy kicsit.
Köszönöm szépen!
üdv,
Csabi
Új hozzászólás Aktív témák
Hirdetés
- Tudományos Pandémia Klub
- Honor Magic6 Pro - kör közepén számok
- A fociról könnyedén, egy baráti társaságban
- Milyen billentyűzetet vegyek?
- sziku69: Fűzzük össze a szavakat :)
- Rágyúr a macOS-re a 3DMark
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Vicces képek
- Milyen processzort vegyek?
- További aktív témák...
- AKCIÓ! Lenovo IS8XM LGA 1150 DDR3 alaplap garanciával hibátlan működéssel
- Samsung Galaxy A04 128GB, Kártyafüggetlen, 1 Év Garanciával
- Eladó Új Motorola G31 4/64GB szürke / 12 hónap jótállással!
- Bomba ár! Lenovo ThinkPad T490s - i5-8GEN I 16GB I 512SSD I 14" FHD I Cam I W11 I Gari!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged