Portál AbcLinuxu, 5. května 2025 09:12

Dotaz: Skript na "prerozdelenie dát" v CSV

7.4.2010 15:49 Peter
Skript na "prerozdelenie dát" v CSV
Přečteno: 281×
Odpovědět | Admin

Dobrý deň prajem.

Mám jeden veľký CSV súbor (cca 1.000.000 záznamov) ktorý vyzerá takto:

"poradove_cislo","Priezvisko Meno","Titul","PSČ","Mesto","Ulica","číslo_domu","Telefón"

a ja ho potrebujem mať takto:

"Titul","Meno","Priezvisko","Telefón","Ulica číslo_domu","Mesto","PSČ"

Ide hlavne o to, že hlavne potrebujem "rozdeliť" sĺpec ("Priezvisko Meno") na ("Meno","Priezvisko") a "spojiť" sĺpce ("Ulica","číslo_domu") na ("Ulica číslo_domu").

Absolútne ale nemám potuchy, že kde začať a aké CLI nástroje na to použíť. Preto od vás drzo prosím ilustračný príklad. :-D

Vopred veľmi pekne ďakujem.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.4.2010 16:09 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Odpovědět | | Sbalit | Link | Blokovat | Admin
A to je nějakej problém si v cyklu načíst ty proměnné a zapsat je do druhého souboru a pak ten starý smazat a nový přejmenovat?

Nebo kde je problém ?
7.4.2010 17:01 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud je CSV generováno a je striktně dodrženo, že mezi čárkou a uvozovkami není mezera a jedná se jen o jeden převod, tak přes editor vi(m) (soubor bude tak do 200MiB a to se zvládne na běžném PC):
cp muj.csv out.csv
vim out.csv
a ve víčku zadat (zapsat znak ':' a pak zkopírovat zbytek):
:%s/^"\([^",]*\)","\([^",]*\)\ \([^",]*\)","\([^",]*\)","\([^",]*\)","\([^",]*\)","\([^",]*\)","\([^",]*\)","\([^",]*\)"$/"\4","\3","\2","\9","\7 \8","\6","\5"/g
asi chvilku počkat
a pak třeba:
:wq
Samozřejně RegExpr se dá použít kdekoliv a jakkoliv je upravit.:)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.4.2010 17:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Sorry, nevím na co myslím, opravička:
:%s/^"\(.*\)","\(.*\)\ \(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)"$/"\4","\3","\2","\9","\7 \8","\6","\5"/g
Bude rozhodně lepší :)
CSV může mít uvozovky mezi uvozovkami (zapsány zdvojeně) a samozřejmě může být mezi uvozovkami čárka.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Tarmaq avatar 7.4.2010 17:57 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Proc to psat ve vimu? Neni lepsi na to pouzit sed? Vzdyt to je uplne stejne..
$ cat foo 
"poradove_cislo","Priezvisko Meno","Titul","PSC","Mesto","Ulica","cislo_domu","Telefon"
$ sed 's/^"\(.*\)","\(.*\)\ \(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)","\(.*\)"$/"\4","\3","\2","\9","\7 \8","\6","\5"/g' foo 
"Titul","Meno","Priezvisko","Telefon","Ulica cislo_domu","Mesto","PSC"
Don't panic!
7.4.2010 18:03 Peter
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Samozrejme, že aj toto funguje perfektne. Chlapci - vrelá vďaka, aspoň som si rozšíril obzory s regexp.
7.4.2010 18:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
No čekal jsem, že to někdo stihne napsat dřív… :)

Odpověď na Vaše otázky je jednoduchá, v obráceném pořadí:
Za daných okolností „není“ :)
a tady je odpověď na to „proč“ :):
Důležité je to RegExp a je jedno kde jej použijete a ve víčku si to můžete opakovaně zkoušet a ladit a okamžitě vidět výsledek (třeba jen na jednom řádku). Takže mi přijde pro přípravu a první naladění víčko lepší.
Pokud to tam už naladím, tak to sjedu na celý text a uložím to a je to.
Pokud by se to mělo často opakovat, je to jiné téma.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.4.2010 08:45 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Souhlasím, také to raději ladím ve vimu se zapnutým zvýrazňováním nalezeného textu, s pomocí undo a historie příkazů je to mnohem rychlejší
7.4.2010 17:59 Peter
Rozbalit Rozbalit vše Re: Skript na "prerozdelenie dát" v CSV
Ty si môj hrdina. Vrelá, vrelá vrelá vďaka. :-D

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.