F4270 UNIX, pocitacove site

Zapoctova uloha D7

Michal Vasulka, UCO 439949

#!/bin/bash

# D7 Napiste skript, ktery ze souboru jejichz nazvy jsou zadane v parametrech
# vybere n nejdelsich radek, u kazde radky je uvedeno poradi ve vstupnim 
# souboru (ve formatu cislo radky: radka), radky jsou na 
# vystupu usporadany podle poradi ve vstupnim souboru
# (tj. podle toho cisla pred dvojteckou na vystupu).
# Parametr n je implicitne 5, nebo muze byt zadan jako prvni jeden az dva
# parametry pomoci -n10, nebo -n 10 (to je priklad n = 10,
# tj. syntaxe je stejna jako napriklad u head). Pokud chybi parametry s nazvy
# souboru, cte standardni vstup. Pokud jsou zadany alespon dva soubory,
# pak je vypis nejdelsich radek z kazdeho souboru uvozen nazvem souboru.

#echo $@
#soubory=$@

#funkce na vykresleni
print_it () {
     soubor=$1
     cat $soubor | awk '{ print length, $0}' | nl | awk '{ print $2, $1, $1=$2="", $0}' | sort -n -r | head -$n | awk '{ print $2, $1, $1=$2="", $0}' | sort -n | awk '{ print $1":", $1=$2="", $0}'
}


#echo "vsechny parametry jsou pred vstupem do if"
#echo $@
#echo ""

# pripad ve formatu -n10 bez mezery
if [[ $1 =~ ^([-])([n])[0-9]+$ ]]; then
       echo 'typ ulohy: " -n10 "'
       echo "$1" > file
       # egrep -only
       # priradi n
       n=$(egrep -o [0-9]+ file)
       echo "n je rovno: "
       echo $n
         
       if [ $# -gt 1 ]; then  # mam parametry - nazvy souboru
                 
            if [ $# -ge 3 ]; then
                 for soubor in $(echo $@ | awk '{$1=""; print $0}'); do
                     echo "$soubor"
                     echo "#############################"
                     print_it $soubor
                 done

            else
                 for soubor in $(echo $@ | awk '{$1=""; print $0}'); do
                     echo "#############################"
                     print_it $soubor
                 done
            fi

       elif [ $# -eq 1 ]; then  # nejsou zadany vstupni soubory 
            echo "zadejte nazvy souboru: " 
            read soubory
            set $soubory  # pozor, vytvori nove $@

            if [ $# -ge 2 ]; then
                echo "jen soubory stuff vetsi nez 2"
                for soubor in $@; do
                    echo "$soubor"
                    print_it $soubor
                done
            else
               for soubor in $@; do
                    # nevypisuju nazev souboru
                    print_it $soubor
               done

             fi

       fi

# pripad ve formatu -n mezera 10
elif [ "$1" = "-n" ] && [[ $2 =~ ^-?[0-9]+$ ]]; then
       ### chova se trochu necekane ohledne parametru pri $@
       ### -n nezobrazuje jako prvni parametr
       ### ale if cyklem to projde, mozna lokalni verze bashe
       ### ale $# ukazuje spravny pocet parametru
       echo 'typ ulohy: " -n 10 "'
       #echo $1
       #echo $2
       n=$2
       echo "uvnitr if"
       echo "vsechny zadane parametry jsou: "
       echo $@
       echo ""
       echo "pocet vsech zadanych parametru: "
       echo $#
       echo "" # ve for cyklu odstranim jenom $1 protoze -n nebyl propusten 
              
       if [ $# -gt 2 ]; then  # mam parametry - nazvy souboru

            if [ $# -ge 4 ]; then
                 for soubor in $(echo $@ | awk '{$1=""; print $0}'); do
                     echo "$soubor"
                     echo "#############################"
                     print_it $soubor
                 done

            else
                 for soubor in $(echo $@ | awk '{$1=""; print $0}'); do
                     echo "#############################"
                     print_it $soubor
                 done
            fi
       elif [ $# -eq 2 ]; then  # nejsou zadany vstupni soubory 
            echo "zadejte nazvy souboru: "
            read soubory
            set $soubory  # pozor, vytvori nove $@

            if [ $# -ge 2 ]; then
                echo "jen soubory stuff vetsi nez 2"
                for soubor in $@; do
                    echo "$soubor"
                    print_it $soubor
                done
            else
               for soubor in $@; do
                    # nevypisuju nazev souboru 
                    print_it $soubor
               done

            fi
       fi

# zadano bez parametru, pouze seznam souboru, n=5 implicitne
else 
     echo 'typ ulohy: bez zadani parametru s  " -n "'
     if [ $# -eq 0 ]; then  # nejsou zadany vstupni soubory 
        echo "zadejte nazvy souboru: "
        read soubory
        set $soubory  # pozor, vytvori nove $@
     fi


      if [ $# -ge 2 ]; then
           echo "jen soubory stuff vetsi nez 2"
           for soubor in $@; do
               echo "$soubor"
               # implicitni n
               n=5
               print_it $soubor
           done
      else
           for soubor in $@; do
               # nevypisuju nazev souboru
               # implicitni n
               n=5
               print_it $soubor
           done
      fi
fi

exit 0