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