Bash push-pop

Fórumok

Hi!

Bashben keresek fájlokra push - pop megoldást, szóval valami olyat, amivel be tudok szúrni egy sort egy fájl végére (na jó, ez még könnyű mondjuk

 >> 

jelekkel), és ki tudok olvasni (venni) egyet az elejéről.

Gugliztam, de nem nagyon találtam gyors megoldást, bár val. csak én nem láttam.

Köszi.

Hozzászólások

head -N /path/filename.etxtension

N: a sorok száma, amennyit ki akarsz venni:

head - elejéről
tail - végéről (ott értelemszerűen visszafelé számolódik utolsó N sor)

A grep kifejezést keres benne

PL:
tail -10 /var/log/messages | grep VGA (nem WGA, mert az szétoffolja a topic-ot ;~)) )

head -1 /var/log/syslog

------------------------
van még a tail parancsnak egy -f kapcsolója is:

tail -f /var/log/proftpd.log > /dev/lpt0

Ez követi a végét a file-nak ha az változik, csak a példám azért rossz, mert a log file-ok általában nyitva vannak, és így a fenti utasítás ami a stdout-ról a sornyomtatóra nyomná át a FTP szerver log-ját, az kb "befogalja" a nyomtatót,a nyomtató vár a file végére (EOF), és mivel ezt nem kapja meg ezért azt jelzi a rendszer felé, hogy nyomtat/foglalt.

Ilyenkor egy cron-ból percenként hívott bash script a megoldás, ami megnézi, hogy mi az utolsó néhány sor, illetve el kell tárolni az utolsó néhány sort, amit már kinyomtattunk, és ezzel összevetni az újabbakat, hogy ne kétszer legyen kinyomtatva. Mert ha csak az utolsó sort tolom ki percenként, akkor ami a két cron hívás közt volt, azt elveszettük.

Bocs hogy kicsit belemerültem.

/mazursky

hm, kicsit rosszul fogalmaztam a kérdést, bocsi.

Szóval olyan megoldásra lenne szükségem, ami úgy működik, mint egy verem, ez alatt azt értem, hogy gyorsan megvalósítható az első sor kiemelése - már ha létezik ilyen. Több író folyamat (push) lenne, és egy olvasó (pop) lenne.

Köszi.

Ez a feladat nem bash-nek valo. Normalis megoldas: C, osztott memoria. Szerintem.
Ps. Tenyleg azt akarod kivenni amit legutoljara raktal be, nem pedig amit legregebben? Akkor mert az elso sorbol mert nem forditva, az utolsobol? Vagy ez egy diszk benchmark lesz :) ?
Szerk:
Elolvastam meg1x a szal elejet, ez sor es nem verem megha pushnak meg popnak hivod akkor is.
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

Tudom, hogy nem verem, csak hasonló kéne :- ). Igazából tök mindegy, hogy melyiket veszem ki, a közepéről is jó lenne, ha az a leggyorsabb :- ), de ami a fájl elején van, az a legrégebbi, nem? Vagy lehet, hogy elírtam, de úgy gondoltam, hogy a végére írok, az elejéből olvasok. A c- s megoldáson már gondolkoztam, de akkor már inkább perl tie típusú fájlkezelését használnám, csak sokkal jobb lenne, ha lenne valami kifejezetten bashes cucc. Val. nem lesz, szóval futottam egy kört fölöslegesen, de ez van.

Az a baj, hogy a "kiveszi" (head, tail, sed ...) nem törli a fájlból, amit kiolvastál!
Esetleg környezeti változóban tárolhatja az olvasó, hogy melyik sort olvasta utoljára (az elejétől), és ezt a számlálót növelheti. Az írók meg mindig a fájl végére írnak (nem tudom versenyhelyzetben mit csinál a bash).
Ha lassul akkor esetleg néha újraírhatja a fájlt, hogy a kiolvasott sorok valóban törlődjenek.

Ha sebesség (és mindenképp bash) kell, akkor esetleg tmpfs (ramdisk) legyen a fájlrendszer, amiben ezek a fájlok mozognak!