Úvod do UNIXu 2016/2017

0  1  2  3  4  5  6  7  8  9  10  11  12 

Cvičení X

  1. Úkol z minulé hodiny
  2. Napište v awku skript, který sečte uid v /etc/passwd
  3. Vytvořte awk skript, který ze souboru vypíš pouze řádky s počtem polí více než 5, a to pouze pole 3 a 4
  4. Stáhněte si log, nalezněte všechny IPv4 adresy a spočítejte jejich výskyty.
  5. Napište skript, který přejmenuje všechny soubory v aktuálním adresáři s příponou jpg na soubory s touž příponou ale s čísly místo názvů, kde čísla budou zarovnaná na tolik míst, kolik je třeba pomocí nul. (Využijte toho, co jste už udělali v jednom z předchozích příkladů.) Tj. například pokud jsou v adresáři soubory alice.jpg, bob.jpg cyril.jpg a daniel.jpg, přejmenoval by je popořadě skript na 1.jpg, 2.jpg, 3.jpg a 4.jpg. Pokud by těchto souborů bylo alespoň deset ale méně než 100, byly by pojmenovány jako 01.jpg, 02.jpg, 03.jpg, 04.jpg
  6. Napište skript reverse, který vypíše své parametry v opačném pořadí. Například reverse a b c d vypíše d c b a.
  7. Napište skript max, jenž vybere maximum ze svých parametrů
  8. Napište skript teacher.sh, který dostane soubor obsahující na každé řádce rovnici ve formátu: a+b=c. Skript zkontroluje, zda rovnost platí. Ano - výpis na stdout, Ne - výpis na stderr. Můžete předpokladát, že všechny rovnice jsou součty a bez mezer. Zkuste vyřešit i pro obecnější případ.

Dnešní témata

Úkol 10 (3 body):
Napište skript v awk, který vypisuje pouze prvočíselné řádky. Zkuste inteligentní kontrolu prvočíselnosti.

    • NR >= 2 {
      if (!divisors[NR]) {
      print $0,NR;
      divisors[NR] = NR; # divisor of prime number
      }
      divisor_count = split(divisors[NR], current_divisors, "-");
      for (idx in current_divisors) {
      divisor = current_divisors[idx];
      new_compound = NR + divisor;
      divisors[new_compound] = divisors[new_compound] "-" divisor;
      }
      }