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 00:33 | IT novinky

    FEL ČVUT vyvinula robotickou stavebnici pro mladé programátory. Stavebnice Brian byla navržená speciálně pro potřeby populární Robosoutěže. Jde ale také o samostatný produkt, který si může koupit každý fanoušek robotiky a programování od 10 let, ideální je i pro střední školy jako výuková pomůcka. Jádro stavebnice tvoří programovatelná řídicí jednotka, kterou vyvinul tým z FEL ČVUT ve spolupráci s průmyslovými partnery. Stavebnici

    … více »
    Ladislav Hagara | Komentářů: 35
    včera 20:33 | Komunita

    Ubuntu bude pro testování nových verzí vydávat měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 25.10 (Questing Quokka).

    Ladislav Hagara | Komentářů: 0
    včera 14:55 | Nová verze

    Společnost Netgate oznámila vydání nové verze 2.8.0 open source firewallové, routovací a VPN platformy pfSense (Wikipedie) postavené na FreeBSD. Přehled novinek v poznámkách k vydání.

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

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

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Zajímavý článek

    Člověk odsouzený za obchod s drogami daroval letos ministerstvu spravedlnosti 468 kusů kryptoměny bitcoin, které pak resort v aukcích prodal za skoro miliardu korun. Darováním se zabývá policejní Národní centrála proti organizovanému zločinu (NCOZ). Deníku N to potvrdil přímo ministr spravedlnosti Pavel Blažek (ODS). Podle resortu bylo nicméně vše v souladu s právem.

    Ladislav Hagara | Komentářů: 48
    28.5. 20:44 | Nová verze

    Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).

    Ladislav Hagara | Komentářů: 0
    28.5. 12:22 | IT novinky

    Na základě národního atribučního procesu vláda České republiky označila Čínskou lidovou republiku za zodpovědnou za škodlivou kybernetickou kampaň proti jedné z neutajovaných komunikačních sítí Ministerstva zahraničních věcí ČR. Tato škodlivá aktivita, která trvala od roku 2022 a zasáhla instituci zařazenou na seznam české kritické infrastruktury, byla provedena kyberšpionážní skupinou APT31, veřejně spojovanou se zpravodajskou službou Ministerstvo státní bezpečnosti (MSS).

    Ladislav Hagara | Komentářů: 41
    28.5. 00:11 | Nová verze

    Google Chrome 137 byl prohlášen za stabilní. Nejnovější stabilní verze 137.0.7151.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 11 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    27.5. 19:22 | Nová verze

    Byl vydán AlmaLinux OS 10 s kódovým názvem Purple Lion. Podrobnosti v poznámkách k vydání. Na rozdíl od Red Hat Enterprise Linuxu 10 nadále podporuje x86-64-v2.

    Ladislav Hagara | Komentářů: 0
    27.5. 15:11 | Nová verze

    Byl vydán Mozilla Firefox 139.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 139 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 10
    Jaký je váš oblíbený skriptovací jazyk?
     (55%)
     (31%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 163 hlasů
     Komentářů: 13, poslední dnes 12:26
    Rozcestník

    Dotaz: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1

    22.8.2017 12:18 nin-ki
    linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Přečteno: 482×
    Příloha:
    Linux, Bash. Mám dva textové soubory - S1 a S2, které obsahují několik sloupců s písmeny a čísly, formát viz příloha. S2 obsahuje výběr řádků z S1 podle předem daného kritéria. Potřebuji provést operaci porovnání a změny číselné hodnoty v konkrétním sloupci. Tedy, pokud bude souhlasit řádek z S2 s řádkem v S1, resp. čísla ve sloupcích 23-26 budou totožná, tak přímo v souboru S1 se změní číslo z 1.00 na 2.00 ve sloupci 55-60. Změna hodnoty pomocí regulárního výrazu je jasná, ale nevím jak provést porovnání.


    Řešení dotazu:


    Odpovědi

    22.8.2017 12:30 NN
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Nejdrive bych nacetl data do 2D pole, nebo databaze. Potom si s tim muzes delat co chces.
    22.8.2017 13:17 nin-ki
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Diky, ale je to pro mne prilis strucne.
    22.8.2017 14:34 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Podle mne na komplexnejší změny v souborech (tedy uvnitř nich) bash nebo jiný shell není moc vhodný. Pokud je to skutečně S2 je výběr (tedy inkluzivita a stejné pořadí) tak v jakémkoliv interpretovaném jazyce (python, perl, možná i shelově php) (nebo skriptem do editorů jako vim nebo emacs) , podle toho co umíte, bych procházel po řádcích S2, pak ke každému řádku nalezl přilušný v S1 , v něm provedl změnu a šel dál. Co je cílem? udělat to, protože to potřebuji, nebo udělat to v shellu, protože tě nekdo chce cvičit?
    22.8.2017 17:12 nin-ki
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Diky. Potrebuju to v ramci zpracovani velkych dat, neni to skolni ukol. Ale take to potrebuju udelat v shellu.
    22.8.2017 19:24 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Proč nevyužiješ standarní unixové nástroje jako je diff, awk, …?
    22.8.2017 19:36 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Jinak mi přijde, že na to jdeš nějak divně. Porovnávat soubor, který zároveň modifikovat? No dobrá, budiž.

    Já bych na to šel tak, že bych si vyseparoval z S2 část co se má porovnávat. Pak bych ve smyčce ten výstup zpracovával přes grep, tak aby mi vrátil i číslo řádky s nalezeným vzorkem. A pak bych ten soubor S1 - ještě před tím, než najede smyčka na další záznam - opracoval přes ed.

    Jde o to, že je asi žádoucí, aby před hledáním dalšího vzorku byl už soubor S1 modifikovaný, je to tak?
    22.8.2017 23:00 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    proboha proč? jakékoli výpočetně přijatelné řešení je dobré. Všechno je to interpretovaný soubor, čistý texták a jestli na začátku je #!/bin/bash nebo #!/usr/bin/perl nebo jakýkoliv jiný jazyk je úplně jedno. Stejně na systému perl už obvykle je, protože dost běžných programů jsou perlové skripty. k tomu scriptu, který tady byl už napsán stačí doplnit jen to #!/usr/bin/perl a když umíš jiný jazyk, tak to udělej v něm. shell je na takovou ulohu divny, protože obvykle pracuje (posuzuje, mění) s objekty na filesystemu tedy soubory a adresáři v celku, dovnitř leze jen málo když tak jako logové záznamy a pod. Možná ve spolupráci s awk by to ohnout šlo, ale awk neznám, sice mě periodicky fascinuje jeho uspornost a efektivita, ale nikdy jsem na něj nanašel sílu.
    wamba avatar 22.8.2017 14:34 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Řešení v Perlu 6, (které jde napodobit v čemkoliv jiným)
    perl6 -e '
        my $S2 = "S2".IO.lines.map( *.substr(23,3) ).Set; 
        for "S1".IO.lines -> $l is copy { 
            NEXT {$l.say}
            next if $l.substr(23,3) ∉ $S2; 
            $l.substr-rw(55,5) = " 2.00";
        }
        '
    
    Z S2 vytáhnu sloupec 23-26 do množiny. Jednotlivé řádky z S1 vytisknu nezměněné pokud nenajdu odpovídající shodu v předešlé množině, nebo cokoliv na 55-60 zaměním za 2.00 a pak vytisknu. Na výstupu dostanu nový S1.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    22.8.2017 17:13 nin-ki
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Diky, Perl bohuzel neumim. Princip chapu.
    22.8.2017 22:02 RM
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Já bych to udělal takhle: S2 i S1 seřadit programem sort -k podle patřičného sloupce a pak krátký one-liner v Awk, který bude číst ze streamu S1. Program si vždy natáhne jeden řádek pomocí getline() z S2 do proměnné a ten bude testovat s každým řádkem (nebo jen částí) přicházejícím ze streamu. Jakmile dojde ke shodě, budou se provádět substituce a to až k první neshodě, pak se načte další řádek z S2, který se dále bude porovnávat v následujících řádcích přicházejících ze streamu z S1, a tak to půjde až do konce souboru S1.
    22.8.2017 22:23 RM
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Raději ještě uvedu tu ideu s awk pro čtení ze dvou vstupů, což by nemuselo být až tak jasné:

    awk '{ if(....) "cat S2.sorted" | getline pattern; (PROGRAM: comp pattern with line-col; substitute;print) }' S1.sorted
    Řešení 1× (nin-ki (tazatel))
    23.8.2017 15:18 nin-ki
    Rozbalit Rozbalit vše Re: linux, bash: porovnani radku v souborech S1 a S2 a nasledna zmena hodnoty v danem soupci v S1
    Diky, nakonec jsem na to nejak prisla. Reseni prikladam. Bohuzel tento editor nechce povolit pridani oznaceni pro soubory do skriptu, takze si prosim primyslete za regex soubor1 a za done sobour2.

    while read line

    do var=$(echo "$line" | cut -c 23-26)

    sed -i "/^\(.\{22\}\)\($var\)\(.*\)/s/^\(.\{54\}\)\(......\)\(.*\)/\1 2.00\3/"

    done<

    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.