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 21:11 | IT novinky

    Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.

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

    The Document Foundation oznámila vydání nové major verze 25.8 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs) a také na Youtube a PeerTube.

    Ladislav Hagara | Komentářů: 1
    dnes 04:00 | Nová verze

    Zeek (Wikipedie), původně Bro, byl vydán v nové major verzi 8.0.0. Jedná se o open source platformu pro analýzu síťového provozu. Vyzkoušet lze online.

    Ladislav Hagara | Komentářů: 0
    včera 23:55 | Zajímavý software

    Emacs na stříhání videa? Klidně.

    Ladislav Hagara | Komentářů: 5
    včera 15:55 | Nová verze

    Byl vydán Mozilla Firefox 142.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 142 je již k dispozici také na Flathubu a Snapcraftu.

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

    Python Developers Survey 2024, výsledky průzkumu mezi vývojáři v Pythonu organizovaném Python Software Foundation ve spolupráci se společností JetBrains v říjnu a listopadu loňského roku. Zúčastnilo se 30 tisíc vývojářů z 200 zemí. Linux používá 59 % z nich.

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

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 2
    včera 01:55 | Nová verze

    Byla vydána nová verze 2.51.0 distribuovaného systému správy verzí Git. Přispělo 91 vývojářů, z toho 21 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

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

    Po roce bylo vydáno nové číslo magazínu Phrack: Phrack 72.

    Ladislav Hagara | Komentářů: 4
    18.8. 19:33 | Pozvánky

    OpenSSL Corporation zve na den otevřených dveří ve středu 20. srpna v Brně a konferenci OpenSSL od 7. do 9. října v Praze.

    Ladislav Hagara | Komentářů: 6
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (81%)
     (7%)
     (7%)
     (0%)
     (4%)
     (0%)
    Celkem 27 hlasů
     Komentářů: 4, poslední včera 16:48
    Rozcestník

    Dotaz: Prohození řádků v souboru

    30.1.2019 12:35 Jakub
    Prohození řádků v souboru
    Přečteno: 636×
    Dobrý den pánové, mám napsaný nějaký script v bash v linuxu pro příkazovou řádku a nemůžu nikde dohledat, jak zaměnit celé řádky v textovém souboru. Třeba 5 řádek za 159. Dá někdo tip?

    Odpovědi

    30.1.2019 15:22 debian+
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    napriklad: vstup
    1
    7
    3
    4
    5
    6
    2
    8
    
    skript.sh:
    #!/bin/bash
    
    # ktory < za
    ktory=2
    za=7
    subor="vstup"
    vystup="vystup"
    riadkov=`cat vstup|wc -l`
    
    # uvod 
    cat vstup |head -n $((ktory-1)) > vystup
    
    # za
    cat vstup |head -n $za | tail -n 1 >> vystup
    
    # medzi ktory za
    cat vstup |head -n $((za-1)) | tail -n $((za-ktory-1)) >> vystup
    
    # ktory
    cat vstup |head -n $ktory | tail -n 1 >> vystup
    
    # koniec
    cat vstup | tail -n $((riadkov-za)) >> vystup
    
    30.1.2019 15:41 Ja
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    #!/usr/bin/env bash
    
    if [[ "$2" -gt "$1" ]]; then
      p1="$1"
      p2="$2"
    else
      p1="$2"
      p2="$1"
    fi
    
    cp data.txt data.out.txt
    
    r1=$(sed -n "${p1}p" data.out.txt)
    r2=$(sed -n "${p2}p" data.out.txt)
    sed -i "
    ${p1}i${r2}
    ${p1}d
    ${p2}i${r1}
    ${p2}d
    " data.out.txt
    cat data.out.txt
    
    
    30.1.2019 17:05 debian+
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    Tvoje je efektivnejsie:
    [localhost tip]$ time bash skript.sh 
    
    real	0m0,023s
    user	0m0,014s
    sys	0m0,018s
    [localhost tmp]$ time bash skript_Ja.sh 2 7
    
    real	0m0,016s
    user	0m0,007s
    sys	0m0,009s
    31.1.2019 02:56 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru

    Tolik UUOC nejen bije do očí, ale možná už i dokonce smrdí z terminálu.

    31.1.2019 17:38 debian+
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    Prepisal som to na lepsie:
    #!/bin/bash
     
    # ktory < za
    ktory=2
    za=6
    riadkov=`cat data.txt|wc -l`
    
    # uvod 
    cat << EOF > data.out.txt
    `head -n $((ktory-1)) data.txt`
    `head -n $za data.txt | tail -n 1`
    `head -n $((za-1)) data.txt| tail -n $((za-ktory-1))`
    `head -n $ktory data.txt| tail -n 1`
    `tail -n $((riadkov-za)) data.txt`
    EOF
    cat data.out.txt
    31.1.2019 03:31 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru

    Chápu to správně tak, že to má vzájemně prohodit nějaké dva řádky a že to má být jenom v Bashi?

    Tak potom bych tady měl obecnější prasárnu, která těch záměn umí několik, ale funguje jen tehdy, pokud se soubor vejde do paměti. Definuje funkci swaplines, která přijímá jako parametry dvojice číslel řádků (od 0) k prohození, oddělené pomlčkou. Například tohle by desetiřádkový vstup převrátilo naruby:

    swaplines 0-9 1-8 2-7 3-6 4-5
    

    A teď ta funkce swaplines:

    swaplines() {
      local -a -i from_to
      local -a file
      local -i from
      local -i to
      local aux
      for aux in "$@"; do
        from_to["${aux%%-*}"]="${aux##*-}"
      done
      readarray -t file
      for from in "${!from_to[@]}"; do
        to="${from_to[from]}"
        aux="${file[from]}"
        file[from]="${file[to]}"
        file[to]="$aux"
      done
      for aux in "${file[@]}"; do
        echo "$aux"
      done
    }
    

    Čte to standardní vstup, píše to na standardní výstup a nemá to vůbec žádnou kontrolu chyb syntaxe — tu bych s chutí ponechal čtenáři za cvičení.

    31.1.2019 19:51 pavele
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    Je to taky v bashi, vymění mezi sebou řádek 5 a 8 :-)
    #!/bin/bash
    
    vim -e -c '5m 8' -c '7m 4' -c 'wq' soubor.txt 
    
    31.1.2019 22:38 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    Ked sa to da v "ed" mode vo vim-e, tak to predsa musi ist aj rovno v ed-e

    echo -e "5m8\n8-m5-\nw\nq\n" | ed -s subor.txt
    If you hold a Unix shell up to your ear, you can you hear the C.
    31.1.2019 23:02 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru

    Ano, že má být něco „v bashi“, to se dá chápat různými způsoby. Já vycházím z toho, vim není bash.

    1.2.2019 01:18 Bherzet | skóre: 19 | blog: Bherzetův blog
    Rozbalit Rozbalit vše Re: Prohození řádků v souboru
    Třeba 5 řádek za 159.
    5 za 159, nebo 5. za 159.?

    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.