man sed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
Jester
man sed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
Jester
érdekes manualod van...
man sed | grep in-place | wc -l
0
közben megnéztem, a magyar man régi. kösz.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
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)
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
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)
aix alá kéne nekem valami "iostat szépenoszloponként-fájlbarendszeresenmentő" izéke. van valakinek ilyesmire ötlete?
tudok aixon crontabba olyasmit közvetlenül, hogy
sar > /tmp/$év$hónap$nap.log
? vagy ezt akkor scripteljem inkább?
aix-et nem láttam még, de ahol sar-t láttam, ott volt sadc is.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
not found. de mindegy valamit összehekkelek. majd lehet hogy jövök még pucoltatni a kimenetet.
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.
aha sa-ra mint kiderült vannak crontab templatek gyárilag. majd kiderül mit adnak ki, de ma már nem látok.
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.
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
sort -k 3 -u in.txt | wc -l
Jester
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őN
egy ilyenben kéne megszámolnom, hogy hány különböző mező3 érték van.
[ Szerkesztve ]
Hümm, buta sort, nem veszi figyelmbe, hogy csak a 3. mezőt kérjük. Akkor marad a kicsit hosszabb verzió:
cut -f3 -d " " in.txt | sort -u | wc -l
Jester
21 , jól működik szerintem
[ Szerkesztve ]
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 ... mezo13
Output:
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13
...
mezo1 mezo2 mezo3+"_"+mezo5 mezo4 mezo6 ... mezo13
Pró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.txt
De sajnos ez hülyeséget írt ki:/ Ötlet?
lehet a mezőkön belül szóköz?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Lehet, de csak úgy, hogy a mező ""-kkel van körülvéve,
mezo1 mezo2 "mezo szokozokkel lehet" mezo4 ... stb
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.
find . -name '*.jpg' -exec konvertalo {} \;
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
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
-type f? nem lenne jobb a kiterjesztésére hivatkozni? mi van, ha van ott valami nem kép?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Tegyük fel, hogy nincs. Ha mégis, majd a convert kihagyja. Cserébe viszont nem csak a jpg-t hanem a jpeg-et meg a png-t meg az akármit is feldolgozza
Ja és ha már itt tartunk akkor inkább -iname hogy legalább a kisnagybetűvel ne legyen gond.
[ Szerkesztve ]
Jester
convert -resize '1024>x1024>' xorg.9500gt.saved.conf >/tmp/xorg.conf2
ls -ltra /tmp/xorg.conf2
-rw-r--r-- 1 bambano bambano 0 aug 27 23.13 /tmp/xorg.conf2
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Van ám benne egy fölösleges átirányítás ami az enyémben nincs.
convert: no decode delegate for this image format `xorg.9500gt.saved.conf' @ error/constitute.c/ReadImage/533.
Viszont .txt-vel sokkal vadabb dolgot csinál a convert
[ Szerkesztve ]
Jester
jogos.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
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 ]
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!
echo -n \* > file
Jester
Thx,
ott rontottam el, hogy "-be raktam a stringet
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
az pont nem jó, '*' a jó.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Pedig próbáltam azt is. Vmit nagyon benézhettem mert most müxik. (kinlódásomban csináltam egy text filet és cat ot irányítottam át)
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
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 = 10
Es 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 }'`
done
Az is megvan, hogy az összes txt fájlt így keresem ki:
find /EbbenA/Mappaban/ -name *.txt
Csak 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 ]
(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
Ez tiszta shell megoldás:
#! /bin/bash
shopt -s extglob
sum=0
for i in *.txt
do
exec 3<"$i"
while read -u 3 line
do
num=${line##Osszes tabla szama*( )=*( )}
if [ "x$num" != "x" ]
then
sum=$((sum + num))
fi
done
exec 3<&-
done
echo $sum
[ Szerkesztve ]
Jester
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
...
done
vagy lehet while ciklussal:
find /EbbenA/Mappaban/ -name *.txt | while read filenev; do
grep ... $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
ha már beforkoltál egy awk-ot, akkor használhatod összeadásra is
Sőt, akkor már mintaillesztésre is a grep helyett.
A csillagháborún jót nevettem
Jester
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
Koszonom szepen Nektek a gyors segitseget!
Ha hazaertem, akkor megprobalom megerteni a leirtakat es osszehozni a script-et.
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
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/*.txt
Problé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!
shopt -s globstar
summa=$(awk '/Osszes tabla szama/ { sum = sum + $4 } END { print sum }' /home/user/adatok/**/*.txt
Jester
summa=$(awk '.....' $(find konyvtarnev -name '*txt'))
vagy:
summa=$( find konyvtar -name '*txt'| xargs cat | awk )
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
@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.