3. cvičení


Zpracování textu: základní programy a grep


Příkaz head

    
    // Vypíše prvních 10 řádků souboru
    head procesy.txt

    // Vypíše prvních 10 řádků z každého souboru
    head procesy.txt procesy2.txt

    // Udělá to samé co předchozí ale nevypisuje hlavičku
    head -q procesy.txt procesy2.txt

    // Vypíše 2 řádky od začátku souboru
    head -n 2  procesy.txt
    head -2 procesy.txt

    // Vrátí prvních n bajtů
    head -c 5 procesy.txt

    // Přesměrování do souboru
    head -n 2 procesy.txt > qux.txt

    // Použití roury
    ls | head

    // Presměrování na konec souboru
    ls | head >> baz.txt
    

Příkaz tail

    
    // Vypíše posledních 10 řádků souboru
    tail procesy.txt

    // Vypíše posledních 10 řádků z každého souboru
    tail procesy.txt procesy2.txt

    // Udělá to samé co předchozí ale nevypisuje hlavičku
    tail -q procesy.txt procesy2.txt

    // Vypíše 2 řádky od konce souboru
    tail -n 2  procesy.txt
    tail -2 procesy.txt

    // Vrátí posledních n bajtů
    tail -c 5 procesy.txt

    // Přesměrování do souboru
    tail -n 2 procesy.txt > qux.txt

    // Použití roury
    ls | tail

    // Presměrování na konec souboru
    ls | tail >> baz.txt
    

Příkaz wc

    
    // Vrátí počet řádků, slov a bitů v souboru
    wc procesy.txt

    // Vrátí počet řádků
    wc -l procesy.txt

    // Vrátí počet znaku
    wc -m procesy.txt

    // Vrátí počet slov
    wc -w procesy.txt
    

Příkaz tac

Zobrazí obsah souboru na std výstupu ale v opačném pořadí.

    
    tac file.txt
    

Příkaz rev

Obrátí pořadí znaků v řetězci.

    
    echo "Hello" | rev
    

Příkaz sort

Setřídí řádky textového souboru.

    
    // Setřídí řádky podle abecedy
    sort fruit.txt

    // Setřídí řádky podle abecedy a výsledek uloží do souboru output.txt
    sort fruit.txt > output.txt
    sort -o output.txt fruit.txt

    // Setřídí řádky v opačném pořadí
    sort -r fruit.txt

    // Zkontroluje jestli je soubor setřízený pokud ne vrací první špatně umístěný řádek
    sort -c fruit.txt

    cat columns.txt
    01 Joe
    02 Marie
    03 Albert
    04 Dave

    // Soubor se třídí podle prvního sloupce
    sort columns.txt

    // Soubor se třídí podle druhého sloupce
    sort -k 2 columns.txt
    

Příkaz unique

Odstraní opakující se řádky.

    
    uniq unique.txt

    // Vypíše počet opakování
    uniq -c unique.txt

    // Vypíše pouze opakující se řádky
    uniq -d unique.txt

    // Vypíše neopakující se řádky
    uniq -u unique.txt
    

Příkaz cut

Odebere nebo vyjme část souboru.

    
    // Vybere 3. sloupec
    cut -f 3 cut.txt

    //  Vybere 2 az 4 sloupec
    cut -f 2-4 cut.txt

    // Vybere 1. až 2. a 4. až 5. sloupec
    cut -f 1-2,4-5 cut.txt

    // Vybere 3. sloupec a dále
    cut -f 3- cut.txt

    // Vybere 3. znak na každém řádku
    cut -c 3 cut.txt

    // Vybere 3. až 12. znak na každém řádku
    cut -c 3-12 cut.txt

    // Vybere 3. až 12. Byte
    cut -b 3-12 cut.txt

    // Pomocí -d změníme oddělovač sloupců
    cut -f 1 -d ':' /etc/passwd
    

Příkaz paste

Vypíše obsah souborů vedle sebe.

    
    // Paralelně
    paste paste.txt paste2.txt

    // Sériově
    paste -s paste.txt paste2.txt

    // Změní oddělovač sloupců
    paste -d "-"  paste.txt paste2.txt

    // Spojí dva soubory a oddělí je tabulátorem
    paste fruit.txt fruitLarge.txt

    // Spojí dva soubory ale oddělí je znakem =
    paste -d =  fruit.txt fruitLarge.txt
    

Příkaz grep

Nástroj pro filtrování řádků na základě regularního výrazu.

    
    // Vybere řádky obsahující dané slovo
    grep parallels /etc/passwd
    grep "Feb 26 17:0" /var/log/kern.log

    // Rekurzivní procházení adresáře
    grep -r "banana" pokus

    // Vypíše řádky obsahující slovo
    grep -w "ps" procesy.txt

    // Vypíše počet nalezených řádků
    grep -cw "ps" procesy.txt

    // Řádky začínající znakem c
    grep "^c" file.txt

    // Řádky obsahující číslo
    grep "[0-9]" file.txt

    // Řádky obsahující slovo proces nebo file
    grep 'proces\|file' file.txt

    // Radky obsahujici slova o delce 7 - 8 znaku
    grep -E "[[:alpha:]]{7,8}" file.txt
    

Příkaz tr

Konvertuje nebo smaže znaky.

    
    // Preloží malá písmena na velká
    tr "[:lower:]" "[:upper:]" < fruit.txt

    // Odebere číslice
    echo "Abc123d56E" | tr -d '[[:digit:]]'

    // Nahradí znaky které nejsou A znakem t
    echo "Abc123d56E" | tr -c 'A' 't'

    // Nahradí mezery znakem /
    echo "Can you see how tr command can be wonderful?" | tr -s " " "/"

    // Nahradí více mezer jdoucí po sobě jednou
    echo "Can you                 see how tr          command can be wonderful?" | tr -s " "
    

Úkoly

Skupina 15:45-17:15

  1. Vypište očíslované řádky souboru od řádku 10 do řádku 20 včetně v opačném pořadí řádků.

    1 bod

  2. Setřiďte tabulkový soubor (sloupce oddělené tabulátorem) podle třetího sloupce číselně sestupně.

    1 bod

  3. Prohoďte v tabulkovém souboru první a druhý sloupec.

    1 bod

  4. Vypište pouze řádky souboru, které nejsou v jiném souboru, tj. "rozdíl" souborů (jako rozdíl množin).

    1 bod

  5. Vypište seznam uživatelů ve tvaru "login_jmeno=JMENO PRIJMENI".

    1 bod

  6. Vypište pouze řádky souboru, které neobsahují dvě stejná čísla (na stejném řádku).

    3 body


Skupina 17:30-19:00

  1. Vypište očíslované řádky souboru /etc/passwd od řádku 6 do řádku 9 včetně v opačném pořadí řádků.

    1 bod

  2. Vypište seznam jmen uživatelských skupin do jedné řádky, jména oddělte mezerami. Seznam skupin se nachází v souboru /etc/group, který má opět textový formát:

      _analyticsusers:*:250:_analyticsd,_networkd,_timed,_reportmemoryexception

    V prvním poli je jméno skupiny, ve třetím číslo (GID) a ve čtvrtém seznam členů.

    1 bod

  3. Vypište do sloupečku seznam jmen skupin, do nichž patříte.

    2 bod

  4. Vypište seznam jmen uživatelů, setříděný vzestupně podle jejich UID. Seznam uživatelů naleznete v souboru /etc/passwd.

    1 bod

  5. V adresáři /etc najděte všechny soubory s příponou „conf“ a zjistěte, který z nich má nejvíce řádek.

    3 body