Hozzászólások
Hali,
a következö problémám akadt egy szövegfile manipuláció során:
adott a szöveg aminek "oszlopai" vesszövel elválassztottak. A szöveg egyik oszlopát akarom manipulálni,de nem tudom egyértelmüen azonositani mert az oszlopokon belül lehetnek szabad szövegek is és abbani is simán elöfordulhat veszö.Annyi az eltérés, hogy ezek idézöjelek között vannak, de az awk-t vagy a cut-ot ezek "nem zavarják" és simán elcsúszik minden oszlop.
Itt van egy példa mire gondolok hátha igy világosabb :
111, '2 22 ',3,'444'
123, 'aaa ', 5,'b, c'
444,'d,d/s', 6,'eee'
Ez ugye 4 oszlop lenne,de itt 'b, c' és itt 'd,d/s' bezavarnak a szövegen belüli vesszök.
Esetleg ha tud valaki valami kézenfekvö megoldást a dologra azt megköszönném.
Üdv.
MZ.
- A hozzászóláshoz be kell jelentkezni
Ha a valódi adat is ilyen, akkor én nem vesszőt állítanék be mezőelválasztónak a cut/awk-ban, hanem aposztrófot (Te ugyan idézőjelnek mondtad, de szóval azt, amiben a sztringek vannak). a Példád alapján neked a 2. mezőt kell elővenned (esetleg a 4.) És a kivágott mezőben aztán már vacakolhatsz a vesszőkkel is. Abban az esetben, ha a 2. és 4. mező nem mindig van idézőjelben (vagy esetleg egyéb mezők is lehetnek, de hol van hol nincs), akkor szerintem a standard UNIX eszközökkel nem nagyon lehet megoldani (illetve valszeg awk-kal saját daraboló fv-t írva igen)
- A hozzászóláshoz be kell jelentkezni
bocs aposztof a stringhatárolo,de ez azért nem jo mezöválasztonak mert ha ez string oszlop üres akkor itt null van aposztrof nélkül pl.:
111, '2 22 ',3,'444'
123, 'aaa ', 5,'b, c'
444,'d,d/s', 6,'eee'
555, null, 7, '1,dd'
és már megint bukik a mutatvány.
Probáltam az awk nak az FS=", " | ", [1-9]" | ", \'" .. meg hasonlo konbináciokat, de ezek mind elöfordulnak az idézöjelen belül is sajna.
Remélem nincs igazad és valahogy ki lehet valahogy bányászni álltalános Unix eszközökkel.(én még nem csalodtam bennük)
Tudom én hogy eszerübb lenne az életem valami egzotikus mezöszeparátorral de hát ez van.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
[quote:4b576160f1="morvaiz"]bocs aposztof a stringhatárolo,de ez azért nem jo mezöválasztonak mert ha ez string oszlop üres akkor itt null van aposztrof nélkül pl.:
111, '2 22 ',3,'444'
123, 'aaa ', 5,'b, c'
444,'d,d/s', 6,'eee'
555, null, 7, '1,dd'
és már megint bukik a mutatvány.
akkor a ",null" stringet elotte csereld
",'null'" stringre
es ujra helyes a mutatvany ;)
- A hozzászóláshoz be kell jelentkezni
@labadimate:kösz,modjuk a javát nem akartam belekeverni.
A TAB/"," csere nem a legjobb mert a szövegbe az is simán van TAB-karakter söt soremelés is,bár modjuk nem kell feltétlenuk TAB-ra lehet másra is cserélni, ennyiben jo a dolog.
@rka:igen, ha jobb megoldásd nincs akkor lehet több lépésben kell megoldanom (csak utánna vissza is kell konvertálni) bár ez nem a legelegánsabb :)
- A hozzászóláshoz be kell jelentkezni
[quote:0134c4caa4="morvaiz"]A szöveg egyik oszlopát akarom manipulálni,de nem tudom egyértelmüen azonositani mert az oszlopokon belül lehetnek szabad szövegek is és abbani is simán elöfordulhat veszö.
Szerintem folyamatosan olvasd a szöveget bájtonként, közben figyeld a terminátort, ami jelen esetben a vessző, és még olyat is csinálj, hogy az idézőjelhez állítgass szemafort, ami mutatja, hogy mikor kell a terminátort lekezelni és mikor átlépni. Lehet, hogy awk-val egyszerűbben meg lehet csinálni, de ez tuti.
- A hozzászóláshoz be kell jelentkezni