Sziasztok!
Ismét lenne egy kérdésem a HUP Fórumozóihoz.
Tehát van mondjuk 100 fájlom.
pl. :
sim.001
sim.002
.
.
.
sim.100
Mindegyik egy szimuláció eredményét tartalmazza, sorokban van rendeződve minden sor egy igényre elvégzett szimulációt mutat.
Minden sor elején van egy N vagy Y, majd további eredmény adatok.
Nekem arra lenne szükségem, hogy az utolsó Y-nal kezdődő teljes sort írja ki az awk script egy új fájlba és ez fusson le mind a 100 fájlra, tehát a végén kapjak egy új, 100 soros fájlt.
Fontos lehet, hogy a 100 fájl nem egyenlő hosszúságú.
Előre is köszönöm a segítségeteket!
- 1259 megtekintés
Hozzászólások
Igy ejfeltajt nem cifrazom awk-kal:
for i in sim.* ; do
awk '/^Y/ { line=$0 }
END {print line }'
' "$i"
done > kozoskimenet
Termeszetesen lehetne (sot valszeg erdemesebb is lenne) osszesen egy db awk-ot futtatni, ehhez fel lehetne hasznalni pl. a FILENAME nevu awk-valtozot.
- A hozzászóláshoz be kell jelentkezni
Szia Zahy,
Köszönöm a választ, majd reggel ki is próbálom!
- A hozzászóláshoz be kell jelentkezni
No itt az egy AWK-os verzio, valszeg ezt is lehet csiszolni meg:
awk '
fn != FILENAME { # most valtottunk masik fajlra
if ( NR != 1 ) # es nem ez a legelso sor
print line # irjuk ki a megtalalt utolso sort
fn = FILENAME
line = ""
}
/^Y/ {
line = $0 # eltaroljuk a minket erdeklo adatot
}
END {
if ( line != "" ) # ha az utolso fajlban is volt ilyen sor
print line # irjuk ki
}
' sim.*
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm, az utóbbi már kipróbáltam és nagyon jól működik!
- A hozzászóláshoz be kell jelentkezni
Hopp, kell bele egy apró javítás. Ugyanis a feltételből nekem nem egyértelmű, hogy minden fájlban kell lennie Y-nal kezdődő sornak, ha viszont valamelyik fájlban esetleg nincs (és ez nem a legutolsó fájl), akkor annak a fájlnak a feldolgozásakor egy fölösleges üres sor jelenik meg, ami nem megengedhető. Szóval a javított verzió - a javítás az első if-ben történt:
awk '
fn != FILENAME { # most valtottunk masik fajlra
if ( line != "" ) # es van kiirni valo sor
print line # irjuk ki
fn = FILENAME
line = ""
}
/^Y/ {
line = $0 # eltaroljuk a minket erdeklo adatot
}
END {
if ( line != "" ) # ha az utolso fajlban is volt ilyen sor
print line # irjuk ki
}
' sim.*
- A hozzászóláshoz be kell jelentkezni
ez csak awk-kal jó vagy normális cuccokkal is?
szerintem az awk elég lassú pl. egy grep-hez meg tail-hez képest.
- A hozzászóláshoz be kell jelentkezni
Szia bambano,
Természetesen más megoldás is érdekelne!
Azért írtam awk-t mert arról tudom, hogy kb. ilyen feladatokra van.
- A hozzászóláshoz be kell jelentkezni
for i in sim*; do
grep '^Y' $i | tail -1
done >valaszfile.txt
ez ugyanaz, csak natív c, nem interpretált.
- A hozzászóláshoz be kell jelentkezni
IMHO a tail és a grep fordítva kell. (Ha helyes a cím.)) Mivel a feladat szerint, az utolsó sorokat kell kigyűjteni, de csak azokat, amelyek Y-nal kezdődnek. A Te verziód az utolsó Y-nal kezdődő sorokat gyűjti ki. Azokat is, amelyen nem a fájl végén vannak. Persze ha ilyen sor csak a fájl végén lehet, akkor ez is jó.
-----
Innen most töltsünk tiszta vizet a nyílt kártyákba: ...
- A hozzászóláshoz be kell jelentkezni
sikítooooook.....
- A hozzászóláshoz be kell jelentkezni
+1 :)
- A hozzászóláshoz be kell jelentkezni
Ne bántsd. Félreértette a feladatot, mert lehet úgy is értelmezni, ahogy ő értette.
A cím alapján pl. az ő értelmezése a helytálló.
- A hozzászóláshoz be kell jelentkezni
nekem pl. van egy olyan hülye szokásom, hogy a posztot is igyekszem elolvasni, nem csak a címet...
- A hozzászóláshoz be kell jelentkezni
Elolvastam a tartalmi részt is. Mivel a poszt és a cím nem teljesen fedte egymást, ezért a címbeli értelmezést választottam. Az indok roppant egyszerű: még az általános iskolában megtanultam, hogy mindig olyan címet kell választani, ami utal a tartalomra. Úgy véltem, hogy amikor a címet írta, akkor még tudta mit akar, de a hosszú szöveges rész fogalmazása közben kicsit összezavarodott, és elvesztette a fonalat.
Kiegészítés: Ha hozzászólásomban zárójelben szereplő mondatot is elolvastad volna, akkor nem kellett volna sikítoznod.
-----
Innen most töltsünk tiszta vizet a nyílt kártyákba: ...
- A hozzászóláshoz be kell jelentkezni
Szerintem kb. 85% eséllyel lehetett egyik módon értelmezni, meg 15% eséllyel a másik módon. vagy még ennyire sem kétértelmű. Amennyiben a szöveg törzse nem az én verziómat, hanem a sokkal valószínűbb verziót támasztja alá, akkor gyanakodnék, hogy a címet félreértettem.
- A hozzászóláshoz be kell jelentkezni
Az eredeti hozzászólásomból az is kiderül (a zárójeles rész alapján), hogy mindkét értelmezési lehetőséget észrevettem. A hozzászólásom (mint azt jeleztem is) a cím szerinti értelmezésre vonatkozott. Ha Te is alaposan elolvastad a címet, a szöveget, és a hozzászólásomat, akkor nem értem, hogy miért sikítoztál. Ennek semmi köze nincs a százalékokhoz.
-----
Innen most töltsünk tiszta vizet a nyílt kártyákba: ...
- A hozzászóláshoz be kell jelentkezni
Idézet következik: "no comment."
- A hozzászóláshoz be kell jelentkezni
Mi történt? Elfogytak az érvek? :-D
-----
Innen most töltsünk tiszta vizet a nyílt kártyákba: ...
- A hozzászóláshoz be kell jelentkezni
Bambano Neked is köszönöm szépen, jól működik a Te verziód is!
- A hozzászóláshoz be kell jelentkezni