abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 14:33 | Zajímavý projekt

Blender Animation Studio zveřejnilo první epizodu z připravovaného animovaného seriálu The Daily Dweebs o domácím mazlíčkovi jménem Dixey. Ke zhlédnutí také ve 3D s rozlišením 8K.

Ladislav Hagara | Komentářů: 0
dnes 12:34 | Komunita

Aktualizovanou počítačovou hru Warhammer 40,000: Dawn of War III v ceně 39,99 eur běžící také na Linuxu lze o víkendu na Steamu hrát zdarma a případně ještě v pondělí koupit s 50% slevou. Do soboty 19:00 lze na Humble Bundle získat zdarma Steam klíč k počítačové hře Sid Meier's Civilization® III v ceně 4,99 eur běžící také ve Wine.

Ladislav Hagara | Komentářů: 0
dnes 00:22 | Nasazení Linuxu

Společnost Samsung oznámila, že skrze dokovací stanici DeX a aplikaci Linux on Galaxy bude možno na Samsung Galaxy S8 a S8+ a Galaxy Note 8 provozovat Linux. Distribuce nebyly blíže upřesněny.

Phantom Alien | Komentářů: 10
včera 23:55 | Komunita

Společnost Purism na svém blogu oznámila, že její notebooky Librem jsou nově dodávány se zrušeným (neutralized and disabled) Intel Management Engine (ME). Aktualizací corebootu na již prodaných noteboocích lze Management Engine také zrušit. Více v podrobném článku.

Ladislav Hagara | Komentářů: 0
včera 21:44 | Nová verze

Organizace Apache Software Foundation (ASF) na svém blogu slaví páté výročí kancelářského balíku Apache OpenOffice jako jejího Top-Level projektu. Při této příležitosti byl vydán Apache OpenOffice 4.1.4 (AOO 4.1.4). Podrobnosti v poznámkách k vydání. Dlouhé čekání na novou verzi tak skončilo.

Ladislav Hagara | Komentářů: 6
včera 19:22 | Pozvánky

Již příští týden - 26. a 27. října se v Praze v hotelu Olšanka odehraje OpenWRT Summit. Na webu konference naleznete program a možnost zakoupení lístků - ty stojí 55 dolarů. Čtvrtek bude přednáškový a v pátek se budou odehrávat převážně workshopy a meetingy.

Miška | Komentářů: 1
včera 13:44 | Nová verze

Bylo vydáno Ubuntu 17.10 s kódovým názvem Artful Aardvark. Ke stažení jsou Ubuntu Desktop a Server, Ubuntu Cloud Images, Ubuntu Netboot, Kubuntu, Lubuntu a Lubuntu Alternate, Lubuntu Next, Ubuntu Budgie, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 22
včera 13:00 | Komunita

MojeFedora.cz informuje, že Fedora 27 dostane podporu pro AAC. Podpora multimediálních formátů je ve výchozí instalaci Fedory tradičně limitovaná kvůli softwarovým patentům, ale desktopový tým Red Hatu se ji i tak snaží v poslední době co nejvíce rozšířit. Už nějaký čas obsahuje kodeky pro MP3, H.264, AC3 a nyní byl přidán také kodek pro další velmi rozšířený zvukový formát – AAC.

Ladislav Hagara | Komentářů: 2
18.10. 23:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 145. brněnský sraz, který proběhne v pátek 20. října od 18:00 hodin v restauraci Time Out na adrese Novoměstská 2 v Řečkovicích. Jedná se o poslední sraz před konferencí OpenAlt 2017, jež proběhne o víkendu 4. a 5. listopadu 2017 na FIT VUT v Brně. Běží registrace účastníků.

Ladislav Hagara | Komentářů: 0
18.10. 21:44 | Nová verze

Byla vydána verze 5.2.0 multiplatformního virtualizačního nástroje Oracle VM VirtualBox. Jedná se o první stabilní verzi z nové větve 5.2. Z novinek lze zmínit například možnost exportování VM do Oracle Cloudu, bezobslužnou instalaci hostovaného systému nebo vylepšené GUI. Podrobnosti v seznamu změn. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 2
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (11%)
 (1%)
 (1%)
 (1%)
 (74%)
 (12%)
Celkem 139 hlasů
 Komentářů: 7, poslední včera 23:06
    Rozcestník

    Dotaz: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    22.2.2016 20:57 pavele
    Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Přečteno: 553×
    Mám takový soubor:
    1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;2007-01-05 06:14:09
    1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;2007-01-05 14:14:09
    1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;2007-01-05 22:14:09
    1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;2007-01-06 06:14:09
    1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;2007-01-06 14:14:09
    1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;2007-01-06 22:14:09
    1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;2007-01-07 06:14:09
    1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;2007-01-07 14:14:09
    1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;2007-01-07 22:14:09
    28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;2007-01-08 15:00:49
    
    Potřebuji získat něco takového:
    1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;20070105061409
    1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;20070105141409
    1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;20070105221409
    1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;20070106061409
    1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;20070106141409
    1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;20070106221409
    1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;20070107061409
    1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;20070107141409
    1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;20070107221409
    28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;20070108150049
    
    Zatím používám toto, ale je to pomalé:
    #!/bin/bash
    
    awk 'BEGIN {
            FS=";";
    }
    
    {
            split($18, Z1, " ");
            split(Z1[1], D, "-");
            split(Z1[2], T, ":");
            printf("%s;", $0);
            printf("%s%s%s", D[1], D[2], D[3]);
            printf("%s%s%s\n", T[1], T[2], T[3]);
    }'
    
    

    Odpovědi

    22.2.2016 21:11 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    Pokud máte jistotu, že se v tom souboru ty znaky jinde vyskytnout nemohou (z ukázky to tak vypadá), nejjednodušší asi bude prohnat to přes

      tr -d ' :-'
    

    (Předpokládám, že chcete odstranit pomlčky (jak to máte v ukázce) a ne tečky (jak píšete v nadpisu).)

    22.2.2016 21:27 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Problém právě je, že znak - se tam může vyskytovat, například:
    151200;-35,426429;23,785839;0,000000;0,000000;30,512638;23,847171;0,000000;0,000000;68,932240;23,730166;0,000000;0,000000;33,195928;-21,802709;98,254647;0,000000;2013-02-23 22:48:40
    162000;35,408064;23,657363;0,000000;0,000000;-30,515696;23,728122;0,000000;0,000000;68,969240;23,623039;0,000000;0,000000;33,234408;-21,691139;-98,222001;0,000000;2013-02-24 01:48:40
    172800;35,374079;23,559708;0,000000;0,000000;30,523148;23,623681;0,000000;0,000000;68,974715;23,525660;0,000000;0,000000;33,267497;21,602085;98,032074;0,000000;2013-02-24 04:48:40
    183600;35,361032;23,466020;0,000000;0,000000;30,557975;23,524950;0,000000;0,000000;69,004485;23,435732;0,000000;0,000000;-33,318995;21,522748;98,042093;0,000000;2013-02-24 07:48:40
    
    Než jsem si to uvědomil, byl už soubor vložený.
    22.2.2016 21:33 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    Tak můžete zkusit třeba

      sed -re 's/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/\1\2\3\4\5\6/'
    

    Ale asi to nebude nijak závratně rychlejší než ten awk.

    22.2.2016 22:22 awk
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    mne tento sed vychadzal 2x pomalsi ako awk autora :) moj awk uplne dole prinasa nejake zrychlenie, ale tiez to nieje nic slavne... asi by som skusil perl/python

    [root@master ~]# time sed -re 's/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/\1\2\3\4\5\6/' tmp2 > /dev/null

    real 0m0.499s user 0m0.490s sys 0m0.000s

    [root@master ~]# time awk 'BEGIN { FS=";"; }

    { split($18, Z1, " "); split(Z1[1], D, "-"); split(Z1[2], T, ":"); printf("%s;", $0); printf("%s%s%s", D[1], D[2], D[3]); printf("%s%s%s\n", T[1], T[2], T[3]); }' tmp2 2&>1 > /dev/null

    real 0m0.258s user 0m0.254s sys 0m0.004s

    [root@master ~]# time awk -F';' '{{ OFS=";";gsub(/[- :]/, "", $NF) ;print}}' tmp2 > /dev/null

    real 0m0.189s user 0m0.188s sys 0m0.001s
    23.2.2016 05:37 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Pokud pro mne bude primárním kritériem rychlost, tak to napíšu v C. Tohle je celkem triviální, u složitějších věcí si lze pomoci třeba flexem.
    23.2.2016 16:57 Andrej | skóre: 44 | blog: Republic of Mordor | Zürich
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    Tak jsem to napsal v C++. Vyzkoušení už je na tazateli. :-)

    ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
    wamba avatar 22.2.2016 23:09 wamba | skóre: 37 | blog: wamba
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    perl -nE 'my @row = split /;/; $row[-1] =~ y/ :-//d; print join q{;}, @row'
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    23.2.2016 10:57 OldFrog {Ondra Nemecek} | skóre: 28 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Co to znamená „pomalé“? Kolik řádků máte a na jakém zařízení to spouštíte?
    -- OldFrog
    23.2.2016 16:43 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Jedná se o cca 300 000 řádků a spouštím to na starém pentiu 1 GHz.

    To sloučení (odstranění dvojtečky, pomlčky a mezery v datumu) potom pomáhá ve výběru dat - vybrat řádky od-do podle datumu a času.
    23.2.2016 17:18 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Takže zatím to vypadá takto:

    1. Původní skript: 12 s. 2. Tento skript: 10,2 s.
    #!/bin/bash
    
    awk 'BEGIN {
            FS=";";
    }
    
    {
            OFS=";";
            gsub("[-: ]","",$18);
            print;
            
    }'
    
    3. Perl: 9,6 s.
    23.2.2016 21:51 OldFrog {Ondra Nemecek} | skóre: 28 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Hmm, ještě by na to šlo jít od lesa - nahrát csv do tabulky v sql databázi a tam si s tím už dělat cokoli bude je libo (v databázi bude následné filtrování _mnohem_ rychlejší). Na svém počítači (Phenom X4 3,2GHz, 8GB RAM) naimportuju do databáze milión řádek za 10 až 20 sec podle použité metody, řešilo se to tady: http://www.abclinuxu.cz/poradna/linux/show/412003

    Nevím ale, zda by tento postup byl pro vás použitelný a přínosný (jak hodně se nad tím csv pak dotazujete, jak často se csv mění, k čemu to celé slouží atd.).

    Pokud hodně používáte csv, můžete se podívat taky na https://csvkit.readthedocs.org/en/0.9.1/ Je to sice suveréně nejpomalejší, ale umí to třeba dělat sql dotazy nad csv, což se může někdy hodit a je to efektní :-)
    -- OldFrog
    wamba avatar 24.2.2016 17:04 wamba | skóre: 37 | blog: wamba
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    vybrat řádky od-do podle datumu a času
    Toto ten text umožňuje taky pomocí standardního porovnání řetězců, ne? Efektivní práci s časem (přičítání dnů, atd.), neumožňuje ani jedno.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    23.2.2016 16:55 Andrej | skóre: 44 | blog: Republic of Mordor | Zürich
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    Co třeba tohle? Není tam ale žádné ošetření chyb a celkem naivně to spoléhá, že sloupec s datem je ten poslední a že za sebou už nemá středník:

    #include <iostream>
    #include <sstream>
    #include <string>
    
    int main() {
        std::stringstream stream;
        std::string line, last_field;
        while (std::getline(std::cin, line)) {
            stream.clear();
            stream.str(line);
            while (std::getline(stream, last_field, ';'));
            std::cout << line.substr(0, line.size() - last_field.size());
            for (char c : last_field) switch (c) {
                case ' ':
                case '-':
                case ':':
                    break;
                default:
                    std::cout << c;
            }
            std::cout << std::endl;
        }
        return 0;
    }
    

    Když tu věc spustím, třeba takhle, …

    clang++ -Wall -Wextra --std=c++11 -march=native -O3 ./bla.c++ -o bla
    ./bla <<-BLA
    1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;2007-01-05 06:14:09
    1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;2007-01-05 14:14:09
    1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;2007-01-05 22:14:09
    1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;2007-01-06 06:14:09
    1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;2007-01-06 14:14:09
    1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;2007-01-06 22:14:09
    1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;2007-01-07 06:14:09
    1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;2007-01-07 14:14:09
    1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;2007-01-07 22:14:09
    28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;2007-01-08 15:00:49
    BLA
    

    … dává mi to výstup:

    1612800;37,17;22,67;0;0;52,38;23,25;0;0;73,74;22,78;0;0;37,02;20,4;98,49;0;20070105061409
    1641600;37,3;22,74;0;0;50,63;23,43;0;0;73,23;22,84;0;0;37,63;20,77;98,76;0;20070105141409
    1670400;37,58;22,71;0;0;49,57;23,48;0;0;72,1;22,79;0;0;38,33;20,48;99,16;0;20070105221409
    1699200;37,16;22,61;0;0;49,09;23,12;0;0;73,83;22,71;0;0;38,02;19,95;99,31;0;20070106061409
    1728000;36,9;22,58;0;0;49,07;22,97;0;0;73,88;22,66;0;0;38,16;19,73;99,39;0;20070106141409
    1756800;36,87;22,56;0;0;49,19;22,88;0;0;73,94;22,63;0;0;38,65;19,6;99,36;0;20070106221409
    1785600;36,87;22,54;0;0;49,28;22,81;0;0;73,97;22,61;0;0;38,93;19,5;99,06;0;20070107061409
    1814400;37,08;22,53;0;0;49,39;22,78;0;0;74,02;22,6;0;0;39,95;19,45;98,86;0;20070107141409
    1843200;37,27;22,53;0;0;49,42;22,78;0;0;74,03;22,59;0;0;40,03;19,43;99,17;0;20070107221409
    28800;37,35;22,63;0;0;49,83;22,94;0;0;73,66;22,67;0;0;38,99;20,11;98,9;0;20070108150049
    

    A to vypadá, že by to mohlo být ono. :-)

    Ale opravdu je v awk nějaký problém s výkonem? Nevěřím, že by awk nemělo tohle rychleji. Ještě bys mohl použít tu druhou implementaci getline(), která dostane předem naalokovaný buffer pevné délky, a v tom bufferu pak vyzobávat znaky. Určitě tady kdekdo vymyslí z fleku klidně dalších pět optimatlizací. Jen je otázka, jestli to fakt stojí za to. :-)

    ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
    23.2.2016 17:16 Andrej | skóre: 44 | blog: Republic of Mordor | Zürich
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru

    A ještě se to dá vzít třeba klidně zezadu. :-D Koneckonců, proč ne.

    #include <iostream>
    #include <string>
    
    int main() {
      std::string line, last_field;
      while (std::getline(std::cin, line)) {
        last_field.clear();
        size_t removed{0};
        for (auto it = line.rbegin(); it != line.rend() && *it != ';'; ++it) {
          switch (*it) {
            case ' ':
            case '-':
            case ':':
              ++removed;
              break;
            default:
              last_field += *it;
          }
        }
        std::cout << line.substr(0, line.size() - last_field.size() - removed);
        std::cout << std::string{last_field.rbegin(), last_field.rend()};
        std::cout << std::endl;
      }
      return 0;
    }
    
    ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
    23.2.2016 18:27 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Tak náhradou awk za mawk se čas se skriptem s gsub smrskl na 3 sekundy, což je přijatelné.

    Pokud by měl ještě někdo návrh, jak to lépe zoptimalizovat v awk, sed, python nebo jiném skriptovacím jazyku...
    wamba avatar 23.2.2016 19:37 wamba | skóre: 37 | blog: wamba
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    a když ten Perl script spustíš takhle, změní se původní soubor (zaloha s .bak),
    perl -i.bak -pE 'my @row = split /;/; $row[-1] =~ y/ :-//d; $_= join q{;}, @row;' input.txt
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    23.2.2016 20:54 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Kruci, v tom awk skriptu s gsub mi zmizel datum, jak ho dostat zpět?

    Potřebuju výstupní formát ve tvaru:
    2700000;-32,513844;-24,360552;0,000000;0,000000;-27,325044;-24,370144;0,000000;0,000000;79,236248;24,215390;0,000000;0,000000;28,465076;22,663942;98,953721;0,000000;2013-03-25 10:48:40;20130325104840
    
    23.2.2016 21:09 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Takže:
    #!/bin/bash
    
    awk 'BEGIN {
            FS=";";
    }
    
    {
            OFS=";";
            $19 = $18
            gsub("[-: ]","",$19);
            print;
    
    Miluju awk... :-)
    23.2.2016 22:18 RM
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    sed 'h;s/.*;//;s/[-: ]//g;x;s/;[^;]*$//;G;s/\n/;/'
    24.2.2016 16:52 pavele
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    31 sekund. :-)

    (mawk: necelé 4 sekundy, počet řádků:194 000)
    24.2.2016 20:06 RM
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Zkuste nastavit jednobajtový mód sedu:
    LC_CTYPE=C sed 'h;s/.*;//;s/[-: ]//g;x;s/;[^;]*$//;G;s/\n/;/' file.txt
    24.2.2016 21:43 RM
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    Při takovém množství bude nejvhodnější nasekat to na části, aby substituce proběhla na co nejmenším počtu znaků. Pak je třeba mít nastavené LC_CTYPE nebo LANG na C nebo POSIX. Nejrychlejší řešení s editorem sed a progamem tr se dá vymyslet asi jedině takové:

    cat /tmp/t | tr '\n' '\t' | tr ';' '\n' | LC_CTYPE=C sed '/:/{s/[ :-]//g}' | tr '\n' ';' | tr '\t' '\n'

    Editor dělá jen triviální substituci na řádcích, kde se nachází dvojtečka. Výhodou může být, že počet sloupců tu nemusí být stejný.
    24.2.2016 22:11 RM
    Rozbalit Rozbalit vše Re: Jak odstranit tečku, mezeru a dvojtečku z datumu v řádcích souboru
    ještě ty tr se dají také smrsknout na obou stranách do jednoho, což přinese jen nepatrnou úsporu. Na mém Atomu trvá úprava 210K řádek 6.7s. Ten samý počet mi gawk upraví za 2,7s.

    time LC_CTYPE=C awk -v FS=';' -v OFS=';' '{gsub("[ -:]", "", $(NF-1) )}1' /tmp/t >/dev/null

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.