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 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 3
včera 23:22 | Nová verze

Byla vydána verze 4.0 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Přehled novinek v Changelogu (GitHub).

Ladislav Hagara | Komentářů: 0
včera 17:22 | Komunita

Včera vydanou hru Rise of the Tomb Raider pro Linux lze do pondělí 23. dubna koupit na Steamu s 67% slevou. Místo 49,99 € za 16,49 €.

Ladislav Hagara | Komentářů: 0
včera 16:11 | Komunita

Na Humble Bundle lze získat počítačovou hru Satellite Reign (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 2
včera 15:44 | Zajímavý software

Společnost Apple koupila před třemi lety společnost FoundationDB vyvíjející stejnojmenný NoSQL databázový systém FoundationDB (Wikipedie). Včera byl tento systém uvolněn jako open source pod licencí Apache 2.0. Zdrojové kódy jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 0
včera 15:00 | Nová verze

Po dva a půl roce od vydání verze 5.7 oznámila společnost Oracle vydání nové major verze 8.0 (8.0.11) databázového systému MySQL (Wikipedie). Přehled novinek v poznámkách k vydání. Zdrojové kódy komunitní verze MySQL jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 2
19.4. 14:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 151. brněnský sraz, který proběhne v pátek 20. 4. od 18:00 hodin v restauraci Benjamin na Drobného 46.

Ladislav Hagara | Komentářů: 0
19.4. 13:33 | Nová verze

Byla vydána verze 18.04.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 0
19.4. 13:11 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.26 a beta verze 1.27 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
19.4. 12:55 | Komunita

Dle plánu byla dnes vydána hra Rise of the Tomb Raider (Wikipedie) pro Linux. Koupit ji lze za 49,99 €.

Ladislav Hagara | Komentářů: 3
Používáte na serverech port knocking?
 (3%)
 (7%)
 (46%)
 (26%)
 (17%)
Celkem 337 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Dotaz: Postupne nacitani prvnich dvou souboru z mnoha v BASHi

    tomes.io avatar 20.10.2012 17:01 tomes.io | skóre: 12 | blog: tomesh
    Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Přečteno: 161×
    Ahoj,

    napsal jsem si skriptik, ktery mi porovnava vzdy prave dva textove soubory:
    #! /bin/bash
      
    input1="$1"
    input2="$2"
      
    while read line
    do
            if grep -e "$line" "$input2" &>/dev/null
            then
               echo "..." >/dev/null
            else
                    sed -i "s#$line#!$line#g" "$input1" "$input2"
            fi
    done <"$input1"
    
    while read line
    do
            if grep -e "$line" "$input1" &>/dev/null
            then
               echo "..." >/dev/null
            else
                    sed -i "s#$line#!$line#g" "$input2" "$input1"
            fi
    done <"$input2"
    Jenze takovych souboru, potrebuju naraz zpracovat stovky. Dejme tomu, ze mam skript v adresari, kde jsou jenom ty .txt soubory. Chtel bych skript spustit tak, aby si vzal prvni dva soubory, zpracoval je, pak si vzal dalsi dva, dalsi dva atd. az by zpracoval o dvojicich vsechny soubory z adresare.

    SOubory jsou pojemnovany takto:
    01.txt.identifikacnicislo, 01.txt.jineidentifikacnicislo, 02.txt.identifikacnicislo, 03.txt.ID ...
    Budu rad za jakoukoliv pomoc. Diky,

    Řešení dotazu:


    Odpovědi

    20.10.2012 18:01 Peter Golis | skóre: 56 | Bratislava
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Pokiaľ sa tie súbory líšia v sekvencii a naraz ich môže byť 98 (pri vynechaní kombinácie 00.txt.identifikacnicislo), tak ich vylistujeme a zoberieme prvé dva: ls -1 | sort -n | head -2

    ale, v praxi to bude vyzerať inak.
    20.10.2012 18:12 l4m4
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Předně bych asi naráz našel řádky, které jsou v input2 ale nejsou v input1. Pokud se řádky v input2 neopakují, je to snadné:
    sort $input1 $input1 $input2 | uniq -u >only2
    
    Následně s klidem používáš řádky coby regulární výrazy. To samozřejmě nebude dělat to, co má, když budou obsahovat znaky, které mají v regexpu speciální význam, je zapotřebí je oescapovat. Přitom se rovnou mohou upravit na regulární výrazy pro úpravu input1
    sed -i 's#[...]#\\\0#g;s#.*#s/^\0$/!\\0/#' only2
               ^^^ sem přijde seznam těch speciálních znaků  
    
    A pak se už akorát input1 upraví pomocí only2
    sed -i -f only2 $input1
    
    Tvůj skript provádí vždy modifikaci input1 i input2, ale když input2 ten řádek neobsahuje, tak není co modifikovat a toto je reundantní -- pokud jsem pochopil správně, co to má dělat, možná by nebylo na škodu to popsat i slovně.

    Analogicky křížem. V tomto ohledu by mi přišlo přirozenější nejdřív vygenerovat skripty v sedu only2 a only1, pak je teprve použít na příslušné soubory. Ale možná úloha vyžaduje aby výsledek zpracování závisel na tom, co s křížovým souborem provedlo v prním kroku... Opět by to vyjasnil slovní popis.

    tomes.io avatar 20.10.2012 19:08 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Priznam se, ze moc nerozumim tomu, jak by
    sort $input1 $input1 $input2 | uniq -u >only2
    vyresil muj problem. Nijak nevidim, jak by si tento prikaz bral z adresare postupne dva a dva soubory za sebou atakdale az by projel cely adresar...Nebo mi neco unika.. nejsem v bashi zbehly. V promennych input1 a input2 jsou preci jmena dvou soboru, ktere skriptu zadam:
    ./compare.sh soubor1 soubor2
    Ale ty jmena souboru mu zadam ja rucne na vstupu z commandlajny. A ja potrebuju to zadavani zautomatizovat tak, jak jsem popsal vyse.

    Ja bych potreboval asi nejaky regexp, ktery by skriptu jako parametry postupne prirazoval prvni dva soubory z adresare, pak dalsi dva soubory atd. rozumis.

    Jinak v souborech nejsou redundantni radky (to je osetrene jinym skriptem uz). Cili na vstupu se predpokladaji dva txt soubory, na stejnych radcich maji stejne vety a ty se porovnavaji, resp se hledaji preklepy. pokud se njde nesrovnalost, skript v obou souborech oznaci zacatek prislusneho radku vykricnikem. Tim oznaci ze vetu nejsou stejne.
    20.10.2012 19:12 l4m4
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Myslel jsem, že je problém v tom, že použití takové monstrozity, kde se soubory čtou v shellu po řádcích a po každém přečteném řádku se spouštějí nějaké programy, je na stovky souborů nepoužitelně pomalé. Tudíž jsem navrhl, jak každou dvojici kompletně zpracovat pomocí pár příkazů.
    tomes.io avatar 20.10.2012 19:56 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    No dobre, ale to porad neresi, jak do skriptu dostat vzdycky postupne ty dva a dva soubory ke zpracovani :) Odhledneme ted od toho, jakym zpusobem ten skript soubory zpracovava. Otazka zni, jak na jeho vstup, jako parametry, dostat vzdy dva a dva soubory postupne z celeho adresare....
    20.10.2012 20:06 l4m4
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    To popsal Kit, nicméně to je ta jednoduchá část...
    20.10.2012 19:44 Kit
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Není lepší místo compare.sh použít diff?
    #!/bin/sh
    while test "$#" -gt 0; do
      diff "$1" "$2"
      shift 2
    done
    
    tomes.io avatar 20.10.2012 19:52 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Ja potrebuju porovnavat radek po radku, aby mohl oznacit konkretni radky. Tvuj skript porovnava cele soubory a nepamatuju se, ze by diff umoznoval takovou praci s radky, ktera by mi umoznila je oznacovat tak, jak jsem popsal vyse.
    20.10.2012 19:58 Kit
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Ale na tvou původní otázku jsem ti snad odpověděl, nebo snad ne? Jestli to potřebuješ polopatě, tak tady:
    #!/bin/sh
    while test "$#" -gt 0; do
      compare.sh "$1" "$2"
      shift 2
    done
    
    Jinak compare.sh si můžeš nadefinovat i jako funkci. Tím se to dost urychlí.
    tomes.io avatar 20.10.2012 20:25 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Postupne nacitani prvnich dvou souboru z mnoha v BASHi
    Ajo, jo uz mi to docvaklo. Diky. Ja obcas potrebuju veci vysvetlit polopaticky ;)

    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.