Hahó!
A következően kezdődő sorokat kéne módosítani:
line_1:1234 budapest titkos utca 2.
mégpedig így:
line_1:1234, budapest, titkos utca 2.
Tehát két vesszőt kéne beilleszteni az adott sorba.
Az irányítószám és a város után. (csv lesz az adott sorból)
Ahol a budapest van ott természetesen más településnév is előfordul, tehát nem lehet fix
pozicíóba (oszlopba) rakni a második vesszőt. Ez a négyjegyű irányítószámnál asszem járható.
köszönöm a segítséget.
- 11904 megtekintés
Hozzászólások
Pl.:
echo "line_1:1234 budapest titkos utca 2." | sed -e 's/\s\+/,/' | sed -e 's/\s\+/,/'
vagy
echo "line_1:1234 budapest titkos utca 2." | sed -r 's/\s+(\S+)\s+/,\1,/'
- A hozzászóláshoz be kell jelentkezni
sed -r 's/^[^:]*:([^ ]*) *([^ ]*) *(.*)/\1,\2,\3/' <<<'line_1:1234 budapest titkos utca 2.'
1234,budapest,titkos utca 2.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
nem fog jól működni, ha a bemenet:
5555 new york luther márton utca 342.
sajnos egyértelműen tudnunk kell, hol válik el a település a közterület nevétől.
- A hozzászóláshoz be kell jelentkezni
Ezzel csak az a baj, hogy rossz az input, mert nincs formázva. Ha feltételezzük, hogy lehet szóköz a helységnévben, akkor az egyedüli megoldás szerintem, hogy egy szótár ismeri a világ összes helységnevét, s az alapján szúrja ki, hogy meddig tart. A másik lehetőség, hogy vélelmezzük, nincs benne szóköz. A harmadik, hogy az input file normálisan struktúrált. Jelenleg a másodikkal élhetünk szerintem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Szerencsére a Magyarországi városnevek (többnyire) egy szóból állnak. Ha akad is ilyen a listán akkor kézzel lesz javítva.
köszönöm
- A hozzászóláshoz be kell jelentkezni
off
Te fordítva működsz. Budapest tulajdonnév, nagy 'B'-vel kezdjük, magyarországi melléknév, kis 'm'-mel kezdődik. ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
a több szóból álló településneveknél ha a szóközt át tudod cserélni valami nonszensz karakterre (pl. #), akkor very easy awk-val.
- A hozzászóláshoz be kell jelentkezni
En erre inkabb awk-ot hasznalnek, hiszen nem klasszikus karaktercsererol van szo (amire inkabb jo a sed), hanem adott poziciora beszurasrol ahogy te is irod. Mas kerdes, hogy az adott pozicio, az nem adott karaktert jelent, hanem adott "oszlop"-ot inkabb.
echo line_1:1234 budapest titkos utca 2. | awk '{print $1", "$2", "$3,$4,$5}'
- A hozzászóláshoz be kell jelentkezni
ezzel is az a baj, hogy nem kezeli a többszavas településnevet
- A hozzászóláshoz be kell jelentkezni
Én is az awk-t javaslom, bár az FS is bekerülhet egy BEGIN után.
Mondj kérlek egyetlen településnevet, ami nem egy szó.. Nem ismerek olyat
--------
Elmélkedtem. Ha több szavas a településnév meg az utcanév, előbb kézzel át kell szerkeszteni a teljes fájlt, kicserélve benne az összes mezőelválasztót tabulátorra vagy bármire, ami nem betű.
Oszt' Riga.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
"Hódmezővásárhely (Szikáncs)", vagy "Hódmezővásárhely Szikáncs" vagy "Szikáncs Hódmezővásárhely", én se tudom, hivatalosan hogy kell írni (link1, link2). Bár az is lehet, hogy kötőjellel kell.
- A hozzászóláshoz be kell jelentkezni
Adatbázisrögzítője válogatja, de egyszerre adnék Sztahanov-emlékérmet és csörgősipkát annak, aki elkezdene olyanokat bevinni, hogy Budapest-Békásmegyer, vagy Nyíregyháza (Oros), illetve Vác-Alsóváros, jóllehet mind tanúkkal igazolhatóan létezik.
- A hozzászóláshoz be kell jelentkezni
Esztergom-Kertváros esetleg?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A település és településrész neve együttes használata sokszor hasznos, sőt szükséges a pontossághoz, így egyszerű megoldás nem nagyon lesz arra nézve, hogy az irányítószám utáni rész hogyan tagolandó település és közterület részekre. Lehet sakkozni, hogy ha a irsz. utáni második szó zárójelben/idézőjelben van, akkor az a település(rész) neve, és utána kell bebiggyeszteni a mezőhatárolót - de pl. a "Nyíregyháza Oros", vagy "Nyíregyháza - Oros" esetén hibázni fog. Mondjuk ez utóbbi kezelhető az egész móka előtt azzal, hogy a kötőjelek előtti/utáni szóközöket kiirtod a fájlból.
- A hozzászóláshoz be kell jelentkezni
Öööö, lehet, hogy félreértesz. Szikáncs egy önálló település, ami közigazgatásilag Hódmezővásárhelyhez tartozik (kb. 10km-re van a várostól). Tehát nem városrész, mint amiket példaként adtál (nyugodtan nézd meg google maps-on vagy bárhol).
Külön irányítószáma is van (Vásárhely 6800, Szikáncs pedig 6806, ha jól tévedek).
Néhány évvel (kb. 3-5?) ezelőttig a neve "egyszerűen" Szikáncs volt (már évmilliók óta), csak valamelyik okos kitalálta, hogy mostantól legyen inkább "Hódmezővásárhely Szikáncs" (vagy nem is tudom, pontosan hogyan kell írni). A "szikáncsiak" személyi igazolványán (vagyis pontosabban a lakcímkártyán) nem Szikáncs vagy Hódmezővásárhely szerepel, hanem Hódmezővásárhely Szikáncs (valamilyen verzióban, vagy kötőjellel, vagy szóközzel, hirtelen nem ugrik be).
Tudom, mert amikor érettségi jegyző voltam, a szoftverben nemigen lehetett így felvinni a településnevet.
De tessék-lássék, egy 2009-es felhívás:
Felhívjuk az érintettek figyelmét arra, hogy a külterületeken – Batida, Szikáncs, Erzsébet, Kútvölgy – élők olyan lakcímkártya birtokában szavazhatnak, amelyen Hódmezővásárhely és az utca neve mellett az adott településnév is szerepel. Mindez az azonos utcanevek megkülönböztetése érdekében szükséges. Azok, akik nem cserélték ki lakcímkártyájukat, mihamarabb tegyék meg, az újat ingyen kapják.
- A hozzászóláshoz be kell jelentkezni
New York
- A hozzászóláshoz be kell jelentkezni
Magyar településekről volt szó, úgy emlékszem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
ezt sehol sem írják explicit módon
- A hozzászóláshoz be kell jelentkezni
Igaz. A példából arra asszociáltam, hogy van egy magyar címeket tartalmazó adatbázisa textben, s ebből szeretne LO Calc vagy MS Excel file-t csinálni, az importhoz kellene a csv.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
ha fejlesztő lennék, tudnám, mi a szabványos megnevezés az 'over/under specification hell' nevű gyönyörűségre. :D
- A hozzászóláshoz be kell jelentkezni
Ez nekem tetszik, csak hogyan bírom rá az awk-t, hogy minden line_1 -el címkézet sort módosítsa az adott file-ban?
- A hozzászóláshoz be kell jelentkezni
Huyeseget irtam, bocs
--------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
awk '/line_1/ {print $1", "$2", "$3,$4,$5}'
- A hozzászóláshoz be kell jelentkezni
Ez jó! De, hogyan kell a file-ban elvégeztetni a módosítást az adott sorokon?
köszönöm!
- A hozzászóláshoz be kell jelentkezni
Az awk tudtommal nem tud inline editálni, ezért awk '{blablabla}' file1 > file2, aztán a file1-et kitörlöd és a file2-tőt átnevezed.
Ennek annyi hasznos mellékhatása is van, hogy mielőtt bármi elveszne, meg lehet nézni, hogy jól sikerült-e a hókuszpókusz.
- A hozzászóláshoz be kell jelentkezni
De a nem módosított sorok elvesznek? Nekem azért kellenének! :-)
Mármint az eredeti helyükön, a módosított sorokkal együtt
köszönöm
- A hozzászóláshoz be kell jelentkezni
bash-4.2$ cat testfile
line1:42745 peldavaros random utca 46541
line1:2465 budapest lofasz utca 555
2465 grh cdasfrgh ter 3
line1:7835 aaaa bbbb 1354
line1: itt szokoz volt!
line1:4254 dudapest vodka utca 24 es ezeket mar le fogja vagni
bash-4.2$ awk '{if (/^line1:/) print $1", "$2", "$3" "$4" "$5; else print $0}' testfile
line1:42745, peldavaros, random utca 46541
line1:2465, budapest, lofasz utca 555
2465 grh cdasfrgh ter 3
line1:7835, aaaa, bbbb 1354
line1: itt szokoz volt!
line1:4254, dudapest, vodka utca 24
bash-4.2$
az utolsó sorban lévő gyengeség kivédését rád bízom :)
szerk. ez a szar nem jelzi, de a szóközös sor tényleg egy szóközzel kezdődik
- A hozzászóláshoz be kell jelentkezni
Huuu!
Tökéletes, nagyon köszönöm. Életmentő volt!
Pontosan azt csinálta amit kellett
csao
- A hozzászóláshoz be kell jelentkezni
ezzel ne elégedj meg. értsd meg, mi miért történik a scriptben. habár pár karakter az egész, egy awk-val ismerkedő embernek érdemes lehet kibelezni. azzal is sokat tanulhatsz, ha megoldod, hogy az utolsó soromat ne vágja le.
- A hozzászóláshoz be kell jelentkezni
A többszavas utcanevek a baja ennek is. Mert bár város tényleg nincs (v. 1-2) Mo-on több szavas, de utcák vannak akár 3 szavasak is. Az elegáns megoldás az lenne, hogy a $3-tól az "utca" -ig egy oszlopnak venné.
--
#conf t
#int world
#no shut
- A hozzászóláshoz be kell jelentkezni
ne felejtsd el, hogy van tér, park, útja, köz, körút etc. is. és mi van, ha valamire helyrajzi szám alapján hivatkozunk?
- A hozzászóláshoz be kell jelentkezni
Ez kezd egyre izgalmasabb lenni. :)
--
#conf t
#int world
#no shut
- A hozzászóláshoz be kell jelentkezni
A helyrajzi szám szívás, mert a példából nem derül ki az esetleges formátuma, de a többi megoldható.
{soreleje}{line_1:}{szám}{településnév pontosan egy szó}{egységnév minimum egy szó}{szám}{sorvége}
Innentől kezdve egyértelműen definiált minden blokk -> szűrhető.
Az más kérdés, hogy ha valahol megsérti a szabályt az input, akkor csúnyán elcsúszhat.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
[NL]line1:aaaa 1234 Budapest Karinthy Frigyes körtér 34. 1. em. 3 [EOL]
:(
--
#conf t
#int world
#no shut
- A hozzászóláshoz be kell jelentkezni
Ez nem felel meg a (korrekt) formadefiníciónak.
Hibalistán a helye.
- A hozzászóláshoz be kell jelentkezni
Jogos :)
- A hozzászóláshoz be kell jelentkezni
Nemide srry
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni