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í
×
včera 23:45 | Zajímavý software

Na blogu Qt bylo představeno Qt 3D Studio. Jedná se o produkt dosud známý pod názvem NVIDIA DRIVE™ Design Studio. NVIDIA jej věnovala Qt. Jedná se o několik set tisíc řádků zdrojového kódu. Qt 3D Studio bude stejně jako Qt k dispozici jak pod open source, tak pod komerční licencí. Ukázka práce s Qt 3D Studiem na YouTube.

Ladislav Hagara | Komentářů: 3
včera 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
včera 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 23
včera 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 8
19.2. 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 18
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 32
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 3
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 60
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 671 hlasů
 Komentářů: 61, poslední dnes 13:06
Rozcestník
Reklama

Dotaz: porovnani 2 souboru bash

22.12.2012 17:54 mofas
porovnani 2 souboru bash
Přečteno: 454×
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: 47
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: 71 | 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: 71 | 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: 71 | 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.