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 12:33 | Zajímavý projekt

    Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.

    Ladislav Hagara | Komentářů: 0
    dnes 12:11 | Pozvánky

    Jarní konference EurOpen.cz 2025 proběhne 26. až 28. května v Brandýse nad Labem. Věnována je programovacím jazykům, vývoji softwaru a programovacím technikám.

    Ladislav Hagara | Komentářů: 0
    včera 21:44 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | IT novinky

    Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.

    Ladislav Hagara | Komentářů: 25
    3.5. 22:33 | Nová verze

    Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.

    Ladislav Hagara | Komentářů: 2
    2.5. 22:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).

    Ladislav Hagara | Komentářů: 0
    2.5. 19:11 | IT novinky

    Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.

    Ladislav Hagara | Komentářů: 5
    2.5. 11:22 | Zajímavý projekt

    Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.

    Ladislav Hagara | Komentářů: 2
    2.5. 09:11 | Bezpečnostní upozornění

    Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.

    Ladislav Hagara | Komentářů: 2
    1.5. 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 3
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (8%)
     (21%)
     (4%)
     (2%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 524 hlasů
     Komentářů: 22, poslední dnes 10:06
    Rozcestník

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

    28.2.2016 13:56 Mirek
    Čím najít duplikátní řádky?
    Přečteno: 1344×
    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: 45 | 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: 54 | 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.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    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: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Čím najít duplikátní řádky?
    Chová se to přesně podle dokumentace.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    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: 78 | blog: Jenda | 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-).
    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: 70
    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: 78 | blog: Jenda | 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.
    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: 78 | blog: Jenda | 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.
    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: 17
    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: 70
    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: 54 | 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.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    wamba avatar 28.2.2016 17:10 wamba | skóre: 38 | 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: 38 | 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: 38 | 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: 48
    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: 38 | 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.