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í
×
    dnes 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

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

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

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

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

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

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 2
    včera 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 5
    včera 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 16
    včera 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (10%)
     (2%)
     (17%)
    Celkem 700 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

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

    28.2.2016 13:56 Mirek
    Čím najít duplikátní řádky?
    Přečteno: 1306×
    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.