abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 2
    včera 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 6
    včera 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 33
    25.4. 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 13
    25.4. 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 3
    25.4. 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    25.4. 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    25.4. 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    25.4. 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    25.4. 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (74%)
     (8%)
     (2%)
     (16%)
    Celkem 812 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: porovnani 2 souboru bash

    22.12.2012 17:54 mofas
    porovnani 2 souboru bash
    Přečteno: 637×
    Zdravim, darky zabaleny a tak si hraju s bashem, protoze potrebuju jednu takovou vecicku udelat. Mam 2 soubory, ktere oba obsahuji vzdy jen jeden rezetec na jednom radku. Tech retezcu je pod sebou i nekolik tisic. Nekdy se tyto retezce shoduji. A ja jsem si udelal program, ktery veme radek z kazdeho souboru, porovna je a vypise mi pouze ty retezce, ktere se nenachazeji v to prvnim souboru. Jak uz jsem rekl, mam to napsane, ale funguje to polovicate a nechapu proc (uz jsem aj buchnul do stolu a nic).

    Muj kod:

    while read radek; do

    if [ "`grep -i $radek $2`" != "`grep -i $radek $1`" ]; then
          echo $radek >> vysledek.txt
    else
          echo $radek >> /dev/null
    fi

    done < $1

    Program spoustim takhle:

    ./ program.sh soubor_1 soubor_2

    Uvedu priklad:

    soubor_1 obsahuje:

    a

    b

    c

    d

    e

    f

    g

    soubor_2 obsahuje:

    g

    b

    e

    d

    i

    g

    vysledny soubor vysledek.txt obsahuje:

    a

    c

    f

    g

    Je to spravne, jen ten posledni znak g tam nema byt, proc tam je? Vzdyt se nachazi v obou souborech. Tohle mi hlava nebere

    Podotykam, že $1 je soubor_1 a $2 je soubor_2. Diky za nakopnuti a preju hezke svatky!

    Řešení dotazu:


    Odpovědi

    pepe_ avatar 22.12.2012 18:15 pepe_ | skóre: 48
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash

    A co konec řádku , není tam cr_lf nebo nějakej podobnej paznak kterej neni vidět ?

    22.12.2012 18:36 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    pod posledním řetězcem v obou souborech je pouze prázdný řádek. Jinak vždy na každém řádku vedle řetězce není nikdy žádný bílý znak nebo cokoliv neviditelného.
    22.12.2012 18:26 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    To musí být hrozně pomalé. Nebyl by lepší diff?

    Potřebuješ to k nějaké funkčnosti nebo je to jen cvičení?
    22.12.2012 18:42 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Ještě před dvěma hodina jsem měl řešení s diffem, ale asi jsem ho špatně pochopil, protože mi vypisoval i řádky, které se shodují v obou souborech. Však diff prochází tak, že veme první řádek z prvního souboru a první řádek z druhého souboru a porovná je...pak zase veme druhé řádky z obou souborů atd.. Jenže když se řádky, které se shodují, budou každý jinde v souboru, tak to už neodhalí, nebo se mýlím?

    Pomalé to je, a ještě se to zpomalilo, když jsem tam dodal do podmínky tohle:

    if [ "`grep -i $radek $2 | tr [A-Z] [a-z]`" != "`grep -i $radek $1 | tr [A-Z] [a-z]`" ]; then

    Zkrátka, aby to převedlo všechno na malé znaky...aby mi to nevyhodilo neshodu na základě toho, že se někde v řetězci nachází velké písmenko.
    22.12.2012 19:06 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Pokud nezáleží na pořadí, je možné záznamy před diff seřadit sortem.

    Také je možné první soubor natáhnout do nějakého asociativního pole a druhý soubor s ním porovnat.
    22.12.2012 19:17 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Jeejda, na sort jsem uplně zapomněl. Díky. To asociativní pole, s tím vůbec zkušenosti nemám, nevím jak by se to dělalo. Ono až tak nezáleží jak rychle to pojede. Ted jsem si zkusil 2 největsi soubory a za minutku to bylo hotove.

    Ze zvědavosti, mohl byste nastánit jak by to s tím asoc. polem vypadalo? Celkem mě to zajímá. Díky
    22.12.2012 19:37 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Nejlepší by to asi bylo v Perlu, ale zrovna mě napadlo to vyzkoušet v SQLite:
    #!/bin/bash
    
    sqlite3 <<EOT
    .separator '|||'
    create table a(nazev text);
    .import a.txt a
    create index inda on a (nazev);
    create table b(nazev text);
    .import b.txt b
    select nazev from b where lower(nazev) not in (select lower(nazev) from a);
    EOT
    
    22.12.2012 20:06 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    co jsem tam koukal, tak i bash ma nejake pole. Diky za nastin reseni!
    22.12.2012 20:20 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    To je sice pravda, ale snad každý jazyk to má vyřešeno lépe. Třeba v PHP to také není těžké:
    <?php
    $a=array();
    foreach (file('a.txt') as $line) {
        $a[strtolower(trim($line))]=$line;
    }
    foreach (file('b.txt') as $line) {
        if (!isset($a[strtolower(trim($line))])) {
            echo trim($line),"\n";
        }
    }
    
    22.12.2012 20:54 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    skvělé, tak tohle je i na první pohled čitelnější a jistě rychlejší ;) Díky ještě jednou
    24.12.2012 04:44 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    …ale jen dokud se vejdete do paměti.
    24.12.2012 07:20 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Těch řádek je dle dotazu jen několik tisíc. Předpokládám, že jsou "normálně" dlouhé a že problém s RAM nebude muset řešit. Jinak může použít DB.
    24.12.2012 03:56 deadmail
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Rozdiely (co je len v prvom, len v druhom alebo v obochoch) dvoch usporiadanych suborov vypisuje comm.

    Len v druhom:
    comm -13 <(sort soubor_1) <(sort soubor_2)
    24.12.2012 14:54 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    děkuju, o tomto příkazu jsem snad ještě neslyšel! Nicméně řešení je rychlé a efektivní. Díky
    24.12.2012 14:59 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Tedy až na to, že mi to vypíše znova skoro celý soubor. Při parametru pouze "-3" to ve vyslednem souboru sice ukáže znova všechno, ale řádky, které se liší, tak ty nechá na začátku řádky a před všechny zbylé řádky hodí tabulátor.
    24.12.2012 17:34 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    i kdyz to spustim jen s parametrem "-3" tak mi to vypíše jako neshodu 2 shodne retezce.

    Jak může comm říct, že tohle jsou rozdílné řetězce:

    Robert_Natus_-_Back_To_Led_(Holz56)-Promo_EP-2002-TR

    Robert_Natus_-_Back_To_Led_(Holz56)-Promo_EP-2002-TR

    ??? Žádný rozdíl ve velikosti znaku, žádné bílé znaky, žádné jiné neviditelné znaky....
    24.12.2012 18:15 Kit
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Když si to vypíšeš hexdumpem, možná nějaký rozdíl najdeš.
    24.12.2012 20:52 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    tak už jsem to rozchodil. Nevím doted jaká byla přesná chyba, ale když už jsem z toho pomalu šílel a naprosto totožný kod dělal něco jiného než předtím, tak jsem resetoval system, a pak už bylo vše v pořádku. comm je skvělý nástroj, trošku jsem si to upravil, aby neuvažoval rozdíl ve velikosti písmen:

    comm -3 <(cat $1 | tr [A-Z] [a-z] | sort) <(cat $2 | tr [A-Z] [a-z] | sort) > vysledek.txt

    Díky ještě jednou!
    24.12.2012 04:41 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash

    1. V jednom souboru máte řádek "g" jednou a ve druhém dvakrát, proto vám to porovnání nevyjde.

    2. Kromě zoufalé neefektivity je použití grepu špatně, protože grep vám vrátí i všechny řádky, kde se vzorek vyskytuje jako podřetězec. Co hůř, vzorek se chápe jako (basic) regulární výraz, takže bude-li obsahovat např. tečku, nebudete se stačit divit, co všechno bude matchovat.

    3. K čemu je podle vás dobrá ta "else" větev (kromě zpomalení skriptu)?

    24.12.2012 15:06 mofas
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    ad 1. chápu

    ad 2. chápu, je to pomalé a neefektivní (zplácal jsem to za pár minut), nicméně funguje jak má (ještě jsem to trochu dovylepšil). Abych grepu zabránil brát vzorec jako basic RE, tak stačí dát vzorek do uvozovek "$vzorek"?

    ad 3. moje blbost, stydím se, díky za upozornění!
    24.12.2012 21:52 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: porovnani 2 souboru bash
    Abych grepu zabránil brát vzorec jako basic RE, tak stačí dát vzorek do uvozovek "$vzorek"?

    Ne, tím jen zařídíte, aby shell neinterpretoval znaky, které jsou pro něj speciální (třeba mezery). Pro chápání vzorku jako řetězce by měl pomoci přepínač -F (nebo spouštět jako fgrep). Ale pořád bude potřeba dávat pozor na podřetězce nebo vícenásobné výskyty (podle způsobu použití).

    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.