Sign in / Register
P03 Cut_2

Filtrování dat

Napište program filtrující data ze souborů v passwd(5) formátu.

Zadání

Ze vstupu ve formátu passwd(5) vypište všechna uživatelská jména. Formát výstupu:

Header of the list: usernames in /etc/passwd
===============================================================================
root
bin
daemon
adm
...
timidity
games
===============================================================================
Footer of the list: lines=30

Počet oddělovacích = musí odpovídat aktuální šířce terminálu.

Vstup programu se bere buď ze souborů zadaných jako argumenty, nebo ze standardního vstupu, nejsou-li zadány žádné použitelné soubory.

Doporučený postup

  • Pokud chcete použít předchozí řešení, odstraňte části připomínající jiný skriptovací jazyk.
  • Doplňte a vyzkoušejte cyklus řízený operátorem <>.
  • Doplňte část explicitního zpracování souborů:
    • $filename,
    • filehandle $FILE nebo klasickým způsobem FILE,
    • open($FILE, "<", $filename),
    • s chybovým výstupem v případě, že open neskončí úspěšně.
    • Uzavření souboru na konci smyčky
    • close($FILE) or ..._chybové hlášení_

Tip: Pro výpis jmen souborů z argumentů je možné zkusit použít funkci join() (perldoc -f join).

  • Vyzkoušejte smyčku foreach i while přes @ARGV.
  • V případě potřeby první položku pole získáme a z pole odstraníme operátorem shift @POLE.

cut_2/cut_2.pl

Pro /etc/passwd, přesměrovaný na standardní vstup, vypíšeme například:

Header of the list: usernames in STDIN
===============================================================================
root
bin
daemon
adm
...
timidity
games
===============================================================================
Footer of the list: lines=30

Pro více souborů, zadaných jako argumenty, vypíšeme například:

Header of the list: usernames in u1 u2 u3
===============================================================================
name1u1
name2u1
name3u1
name4u1
...
name3u3
name4u3
===============================================================================
Footer of the list: lines=12