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ářů: 0
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ářů: 7
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ářů: 4
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ářů: 31
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ářů: 57
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%)
 (71%)
 (3%)
 (10%)
Celkem 669 hlasů
 Komentářů: 53, poslední včera 18:38
Rozcestník
Reklama

Dotaz: Čím najít duplikátní řádky?

28.2.2016 13:56 Mirek
Čím najít duplikátní řádky?
Přečteno: 892×
Rád bych nástroj k nalezení duplikátních řádků, který mi dá možnost vybrat duplikátní řádek ke smazání. Jako test soubor mám
! flora
jetel
len
! fauna
jelen
lev
! nebe
letadlo jelen
tupolev
! dalsi
lentilka
jelenice
jitrnice
jetel
lev

Řešení dotazu:


Odpovědi

28.2.2016 14:08 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
uniq seznam.txt
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
pavlix avatar 28.2.2016 23:35 pavlix | skóre: 53 | blog: pavlix
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Obávám se, že uniq seznam.txt dá úplně stejný výsledek jako cat seznam.txt.
29.2.2016 18:02 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
On ten uniq mi stejně nějak divně funguje, když dle tohohle příkladu.
$ cat duplitest.txt 
! flora
jetel
len
! fauna
jelen
lev
! nebe
letadlo jelen
tupolev
! dalsi
lentilka
jelenice
jitrnice
jetel
lev
mi vypíše po
$ uniq -c -w 3 duplitest.txt
      1 ! flora
      1 jetel
      1 len
      1 ! fauna
      1 jelen
      1 lev
      1 ! nebe
      1 letadlo jelen
      1 tupolev
      1 ! dalsi
      1 lentilka
      1 jelenice
      1 jitrnice
      1 jetel
      1 lev
přitom by měl vypsat
$ uniq -c -w 3 duplitest.txt
      2 jet
      2 len
      2 jel
      2 lev
alespoň to tak chápu z toho externího příkladu.
pavlix avatar 29.2.2016 22:39 pavlix | skóre: 53 | blog: pavlix
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Chová se to přesně podle dokumentace.
Fuky avatar 28.2.2016 14:23 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?

Vzhledem k tomu, že to chceš dělat interaktivně, tak to lze udělat např. následovně. Uložíš si všechny duplicitní řádky do souboru duplicate.lines:

$ sort input.txt |uniq -d >duplicate.lines

V oblíbeném textovém editoru smažeš ze souboru duplicate.lines řádky, které nechceš odstranit:

$ vim duplicate.lines

Z původního vstupního souboru odfiltruješ všechny řádky, které jsou v souboru duplicate.lines a výstup uložíš do nového souboru new_input.txt:

$ fgrep -vxf duplicate.lines input.txt >new_input.txt

28.2.2016 14:34 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Nechci to nijak třídit, zapomněl jsem to uvést. Díky všem za nápady, zatím..
Fuky avatar 28.2.2016 14:44 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Však ve výstupním souboru je zachováno stejné pořadí řádků jako ve vstupním souboru. Jen jsou v něm odstraněny řádky které chceš.
28.2.2016 15:12 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?

Našlo mi to řádky

jetel
lev

ty jsem odstranil, protože jsem je nechtěl smazat dokud mi nedá výběr který duplikátní řádek se mi smaže, nechci smazat vždy jen první nebo vždy jen druhý, chci vědět který se smaže.

Poslední krok mi vrátil původní soubor.

Jendа avatar 28.2.2016 16:09 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Hm, to zní komplikovaně, a asi na to bude potřeba něco naprogramovat… Osobně bych to dělal tak, že bych v Pythonu načetl řádky do dictionary a u každého si pamatoval, kolikrát tam byl, pak bych soubor znova prošel a před každý řádek vypsal číslo z toho dictionary, pak bych to v textovém editoru promazal a pak bych odstranil první sloupec (cut -d " " -f 2-).
Vox agroferti, vox Dei.
29.2.2016 15:13 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Nu dobrá, tak využij získaný soubor duplicate.lines a ulož si do souboru remove.lines všechny řádky s duplicitami a prefixem, který charakteruzuje číslo řádku ve vstupním souboru.
Co když budu mít soubor s tisíci řádky a navíc já se ty duplicity snažím mezi těmi tisíci najít, kdybch věděl které to jsou nepokládal bych zde dotaz. Vážím si ale tvé snahy, jen chybí uvažování jak moc to bude efektivní v souboru s těmi tisíci položkami. Chci říct, že na takový malý soubor je až příliš mnoho interakce ;-)
29.2.2016 15:15 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
http://www.abclinuxu.cz/poradna/linux/show/414063#12
Fuky avatar 28.2.2016 16:54 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?

Nu dobrá, tak využij získaný soubor duplicate.lines a ulož si do souboru remove.lines všechny řádky s duplicitami a prefixem, který charakteruzuje číslo řádku ve vstupním souboru.

$ fgrep -nxf duplicate.lines input.txt >remove.lines

Pak si opět v oblíbeném textovém editoru smaž ze souboru remove.lines řádky, které nechceš odstranit a následně využij tento soubor pro smazání konkrétních řádků ze vstupního souboru:

$ sed -e $(cut -f 1 -d ":" remove.list |sed -e 's/$/d;/' |tr -d "\n") input.txt >new_input.txt

Soubor new_input.txt bude obsahovat výsledek.

Josef Kufner avatar 28.2.2016 14:30 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Pokud chceš zachovat pořadí řádků, nahrej to do SQL databáze, přidej sloupec, který bude značit duplicity a pak můžeš interaktivně mazat libovolným GUI klientem.
Hello world ! Segmentation fault (core dumped)
28.2.2016 14:52 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
nahrej to do SQL databáze

S datábazemi nemám zkušenosti, ale předpokládám, že mám k tomu použít LibreOffice Base a pak ale nevím co dál. Co bych měl hledat v nápovědě abych dosáhl toho co mi radíš.

přidej sloupec, který bude značit duplicity
Dobře nějak vytvořím sloupec ale jak porozumět, že má značit duplicity?
Jendа avatar 28.2.2016 16:05 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Base by asi šlo použít, ale osobně bych k tomu použil SQLite nebo MySQL. K MySQL používám klikátor Adminer.

Duplicity nevím jak označit, tohle by možná mohlo fungovat.
Vox agroferti, vox Dei.
28.2.2016 16:28 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Srandovní na tom je, že v PSPadu (freeware) pro Windows to jde na pár kroků i bez vytváření nějaké databáze, editor to najde s možností interakce bez vytváření nějakých dočasných souborů. On sice funguje i jakžtakž ve Wine ale mám problém s jeho výkonem, proto používám Bluefish ale zdaleka nemá funkčnost PSPadu včetně tohoto.
Jendа avatar 28.2.2016 16:35 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Not my problem.

V tom případě stačilo dát do Googlu "vim find duplicate lines" a kliknout na první odkaz.
Vox agroferti, vox Dei.
28.2.2016 16:55 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
A že jsi to neudělal dříve? Dobrá budu se muset naučit s Vimem když to jinak jednoduše nejde.
28.2.2016 19:15 Jindřich Makovička | skóre: 13
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Frantové uživatelé tyhle věci zpravidla řeší v Excelu a spol...
29.2.2016 15:42 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Taky řešení, ale pro moje účely moc komplikované a zdlouhavé na více položek. Díky ;-)
Josef Kufner avatar 29.2.2016 00:46 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Na takový úkol je celkem jedno, která databáze to bude. Pointa je v tom, že si v jednom sloupečku uchová původní data a do dalšího si nechá spočítat, zda stejný řádek už tam je. A pokud použitá databáze nezachovává pořadí řádků, tak si tam přidá i číslo řádku.
Hello world ! Segmentation fault (core dumped)
pavlix avatar 28.2.2016 23:36 pavlix | skóre: 53 | blog: pavlix
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Pokud chceš zachovat pořadí řádků, nahrej to do SQL databáze
Pobavilo.
wamba avatar 28.2.2016 17:10 wamba | skóre: 37 | blog: wamba
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
můžeš si napsat script který ti vypíše text řádků a k nim indexy řádků, kde se nachází, pak vyfiltruješ ty, kde jsou 2 a více indexy, v Perlu 6 třeba takhle:
perl6 -e 'my %rows .= push: lines.pairs.invert; %rows.grep( *.value.elems > 1 )>>.say'
:)
This would have been so hard to fix when you don't know that there is in fact an easy fix.
28.2.2016 17:50 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Budu muset teda počkat na verzi 6, mám jen 5, moc ale díky.
28.2.2016 22:32 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
awk '{print a[$0]++":"$0}' file.txt | tac | awk -v FS=':' '{b[$2]=$1} a[$2]++{b[$2]++} b[$2]==0{b[$2]=""} b[$2]{b[$2]=">:"} {print b[$2]$2}' | tac | awk -v FS=':' '$1==">" && !a[$2]{a[$2]=">"++i">>"} {print $1a[$2]$2}'

Je to trochu delší. Bez požadavku na číslování se dá odstranit poslední Awk.
Řešení 1× (1john2)
29.2.2016 10:57 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Ještě k tomu terminálové omalovátko (max deset barev):

| sed 's#>>\([0-9]\)>>\(.*\)#"\\033[1m\\033[4\1m\2\\033[0m"#' | xargs -I {} printf "{}\\n"
29.2.2016 15:23 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
WoW, to se mi moc líbí ;-) Pro mě solušn #1
29.2.2016 15:49 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
I to bez těch barviček, ale to s tím perlem, mě přijde nepřehlednější, jinak se pokusím porozumět co ty řeťezce v těch vašich příkazech vlastně dělají;-)
1.3.2016 16:20 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Tak jsem to zkoušel na svém .vimrc a koukam, že to havaruje na uvozovkách, které se tam vyskytují jako komentáře. Tož jsem to ještě opravil:

| sed '/^>>[0-9]>>/{ s#>>#\\033[1m\\033[4# ; s#>>#m# ; s#$#\\033[0m#} ' | xargs -0 -I {} printf '%b' "{}"

No, a ze sedu jsem vyházel ty proměnné \1 a \2, bez nich to bude rychlejší. Také printf jsem udělal blbuvzdornější, aby měl jardík klidné spaní.
1.3.2016 18:46 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Příloha:
Bohužel to havaruje i na tomto, kdežto ten perl funguje stále-
1.3.2016 20:24 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
| xargs -d '\n' -I {} printf '%b' "{}\\n"
2.3.2016 08:08 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Lepší, jen mi tam něco žere znaky dole a zůstane tam jen torzo "http". Mimochodem to >>XX>> značí pořadí duplikátů po vyčerpání barev nebo to bere i s těma barevnýma, předtím jsem myslel, že odkazuje na řádky. Je mi jasný, že až smažu barevný a provedu kontrolu znovu, místo >>XX>> budou zase jen barevný. Poslední věc bych si přál, jestli by mohl být soubor uvedený jako poslední argument nikoliv uprostřed těch několika přesměrovaných příkazů (aby to šlo použít v Bluefishi nebo i jako alias)?
2.3.2016 10:32 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
žere znaky dole

změň oddělovače IFS z : na jiné -- navrhuji ^X (CTRL-V CTRL-X)
2.3.2016 10:40 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
jako poslední argument....aby...použít alias

manuál bashe říká -- používejte raději "funkce" než aliasy, Pak můžeš použít parametr $1, který ti makro-procesor krásně expanduje tam kde žádáš
2.3.2016 10:46 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
předtím jsem myslel, že odkazuje na řádky

právě v tom je celé know-how mého řešení, že na řádky neodkazuje, což by bylo o něco jednodušší. Jedná se o pořadí duplicit, z čehož se nechají pak také lehce obarvit (jen prvních 9). Myslel jsem, že je to jasný od začátku.
2.3.2016 11:33 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Dobrá nějak se s tím poperu.
(jen prvních 9)
Pokud těch prvních devět už nebude mít svůj duplikát, bude obarveno zase dalších devět, je to tak, zkrátka dokud nesmažu alespoň jeden duplikát?
2.3.2016 12:46 RM
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
přesně tak
wamba avatar 28.2.2016 23:16 wamba | skóre: 37 | blog: wamba
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Perl 6 a Perl jsou dva různé jazyky. Perl 6 můžeš někde nainstalovat pomocí balíčku rakudo. Použil jsem ho jen proto, že v něm experimentuji a napadlo hezké řešení. Napsat to jde v spoustě věcí v Perlu např.
perl -nE 'BEGIN{ my %line; }; chomp; push @{$line{$_}}, $.; END{ for (keys %line) { say $_ . q{: } . join q{, }, @{$line{$_}} if @{$line{$_}} > 1;}; };'
ale nevypadá to, tak elegantně jak v Perlu 6 :)
This would have been so hard to fix when you don't know that there is in fact an easy fix.
29.2.2016 15:36 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Wow, tak tohle stejně efektivní ;-) Líbí se mě obě stejně takže dvě první místa ;-) Mohl bys dát i výstup toho perl6, jsem jenom zvedavý, i když tam třeba neuvidím barvy?
wamba avatar 29.2.2016 16:11 wamba | skóre: 37 | blog: wamba
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Input:
perl6 -e 'my %rows .= push: lines.pairs.invert; %rows.grep( *.value.elems > 1 )>>.say' <<EOF
! flora
jetel
len
! fauna
jelen
lev
! nebe
letadlo jelen
tupolev
! dalsi
lentilka
jelenice
jitrnice
jetel
lev
EOF
Output:
jetel => [1 13]
lev => [5 14]
Převádí se to do pole tak jsou řádky číslovány od 0. U Perlu 6 zatím drhne rychlost, ale tisíce by ještě měli být v pohodě.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
29.2.2016 16:26 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Taky hezký, tamto je naprosto dostatečné a přehledné. Sice musím otvírat stejný soubor 2x ale to nic neubírá na efektivitě.
pepe_ avatar 29.2.2016 23:25 pepe_ | skóre: 47
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?

To je nějaké divné ...

pepe@PC-PEPE-LINUX:~$ perl -nE 'BEGIN{ my %line; }; chomp; push @{$line{$_}}, $.; END{ for (keys %line) { say $_ . q{: } . join q{, }, @{$line{$_}} if @{$line{$_}} > 1;}; };' < file.txt lev: 6, 15 jetel: 2, 14 pepe@PC-PEPE-LINUX:~$ perl6 -e 'my %rows .= push: lines.pairs.invert; %rows.grep( *.value.elems > 1 )>>.say' < file.txt jetel => [1 13] lev => [5 14] pepe@PC-PEPE-LINUX:~$ cat file.txt ! flora jetel len ! fauna jelen lev ! nebe letadlo jelen tupolev ! dalsi lentilka jelenice jitrnice jetel lev
  Jakto že to označuje pokaždé něco jiného ?
wamba avatar 1.3.2016 00:46 wamba | skóre: 37 | blog: wamba
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Co se ti nezdá, že jednou je 2, 14 a podruhé 1, 13? To protože jednou to čísluje řádky od 1 a podruhé od 0. Jak už jsem psal, ten příklad v Perlu 6 přistupuje k tomu souboru jako k seznamu řádků a první index v seznamu je 0.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
29.2.2016 16:14 Mirek
Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
Navíc to lze použít jako externí filtr v Bluefishi.

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.