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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 0
včera 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 18
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 767 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: porovnani 2 souboru bash

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