Pokémon zijn fictieve wezens die gevangen en getraind worden door mensen — in deze context Pokémon Trainers genaamd — om ze dan voor de sport tegen elkaar te laten vechten. Tijdens zo een gevecht kan een Pokémon die aanvalt een slag (技 waza) uitdelen aan zijn tegenstander om daarmee diens hoeveelheid HP (health points) tot nul te proberen herleiden, waarop de Pokémon bezwijkt (ひんし hinshi).
Het type (タイプ taipu) van een Pokémon is een belangrijke eigenschap die aangeeft wat zijn sterke en zwakke punten zijn. Het is een bepalende factor voor de effectiviteit van de slagen die hij aan tegenstanders kan uitdelen, als een soort uitbreiding op de onderlinge verhoudingen tussen de symbolen gebruikt bij het spelletje blad-steen-schaar. Het schoolvoorbeeld van deze onderlinge verhoudingen zijn deze tussen Grass, Fire en Water types: Grass is zwak tegen Fire, Fire is zwak tegen Water, Water is zwak tegen Grass, maar elk zijn ze vrij goed bestand tegen de andere types. Sommige Pokémon zijn ook volledig immuun tegen bepaalde soorten aanvallen, zoals bijvoorbeeld het Ghost type dat immuun is tegen slagen van de types Normal en Fighting. Deze zwakheden, weerstanden en immuniteiten kunnen ook gecombineerd worden als een Pokémon meerdere types heeft.
Het tekstbestand pokemon.csv1 bevat een lijst van Pokémon. Elke regel van het bestand bevat informatie over één Pokémon, bestaande uit de volgende acht velden die door komma's (,) van elkaar worden gescheiden: i) uniek volgnummer (#), ii) naam (Name), iii) hoofdklasse (Type 1), iv) nevenklasse (Type 2), v) totale levenskracht (Total), vi) health points (HP), vii) aanvalskracht (Attack) en viii) zwakheden (Weaknesses). Een Pokémon kan meerdere zwakheden hebben, die dan van elkaar gescheiden worden door puntkomma's. De velden bevatten zelf nooit komma's. De velden met numerieke waarden (#, Total, HP en Attack) bevatten steeds positieve natuurlijke getallen, zonder specifieke bovengrens.
Gevraagd wordt om — gebruikmakend van de teksteditors vi of vim — een reeks commando's op te stellen die achtereenvolgens de volgende opdrachten uitvoeren. Probeer voor elke opdracht zo weinig mogelijk commando's te gebruiken en zorg er voor dat elk van deze commando's bestaat uit zo weinig mogelijk tekens. De commando's mogen geen programmeerbare filters (bv. awk) gebruiken Alle opdrachten moeten na elkaar uitgevoerd worden. De opdrachten mogen de eerste regel (hoofding) niet wijzigen, tenzij dit expliciet anders vermeld staat. Ter controle kan je gebruikmaken van de meegeleverde bestanden pokemon.i.csv (ZIP2), die telkens de inhoud van het bestand bevatten nadat de $$i$$-de opdracht werd uitgevoerd.
Sorteer het bestand volgens dalende totale levenskracht (Total) en bij gelijke totale levenskracht oplopend volgens naam (Name) van de Pokémon. Zo moet
#,Name,Type 1,Type 2,Total,HP,Attack,Weaknesses 1,Bulbasaur,Grass,Poison,318,45,49,Psychic;Ice;Fire;Flying 2,Ivysaur,Grass,Poison,405,60,62,Psychic;Fire;Flying;Ice 3,Venusaur,Grass,Poison,525,80,82,Psychic;Ice;Fire;Flying 4,Charmander,Fire,,309,39,52,Rock;Water;Ground 5,Charmeleon,Fire,,405,58,64,Rock;Water;Ground 6,Charizard,Fire,Flying,534,78,84,Electric;Water;Dragon;Rock;Ground …
bijvoorbeeld omgezet worden naar (pokemon.1.csv3)
#,Name,Type 1,Type 2,Total,HP,Attack,Weaknesses 493,Arceus,Normal,,720,120,120,Fighting 483,Dialga,Steel,Dragon,680,100,120,Fighting;Ground 250,Ho-oh,Fire,Flying,680,106,130,Electric;Water;Rock 249,Lugia,Psychic,Flying,680,106,90,Electric;Ice;Ghost;Dark;Rock 150,Mewtwo,Psychic,,680,106,110,Bug;Ghost;Dark;Flying;Fairy 484,Palkia,Water,Dragon,680,90,120,Dragon;Fairy …
Voeg de velden met de hoofdklasse (Type 1) en de nevenklasse (Type 2) samen tot één veld Types door de inhoud van de twee velden samen te de voegen, gescheiden door een puntkomma (;). Merk op dat elke Pokémon steeds een hoofdklasse heeft, maar niet altijd een nevenklasse. Wanneer het veld van de nevenklasse leeg is, dan moet het nieuwe veld (Types) enkel de hoofdklasse van de Pokémon bevatten (zonder puntkomma). We krijgen dan (pokemon.2.csv4)
#,Name,Types,Total,HP,Attack,Weaknesses 493,Arceus,Normal,720,120,120,Fighting 483,Dialga,Steel;Dragon,680,100,120,Fighting;Ground 250,Ho-oh,Fire;Flying,680,106,130,Electric;Water;Rock 249,Lugia,Psychic;Flying,680,106,90,Electric;Ice;Ghost;Dark;Rock 150,Mewtwo,Psychic,680,106,110,Bug;Ghost;Dark;Flying;Fairy 484,Palkia,Water;Dragon,680,90,120,Dragon;Fairy …
Voeg op het einde van elke regel een nieuwe veld Strength toe, met als inhoud strong wanneer de health points van een Pokémon groter of gelijk zijn aan 50 en weak in het andere geval. Hou er rekening mee dat een Pokémon over meer dan honderd (of duizend, …) health points kan beschikken. We krijgen dan (pokemon.3.csv5).
#,Name,Types,Total,HP,Attack,Weaknesses,Strength 493,Arceus,Normal,720,120,120,Fighting,strong 483,Dialga,Steel;Dragon,680,100,120,Fighting;Ground,strong 250,Ho-oh,Fire;Flying,680,106,130,Electric;Water;Rock,strong 249,Lugia,Psychic;Flying,680,106,90,Electric;Ice;Ghost;Dark;Rock,strong 150,Mewtwo,Psychic,680,106,110,Bug;Ghost;Dark;Flying;Fairy,strong 484,Palkia,Water;Dragon,680,90,120,Dragon;Fairy,strong …
Verwijder alle Pokémon die Ice als zwakheid (Weakness) hebben, in combinatie met ofwel Fire of Rock (of beide). Een Pokémon moet dus enkel verwijderd worden als hij de zwakheden Ice en Fire heeft, of als hij de zwakheden Ice en Rock heeft. Hou wel rekening met het feit dat de zwakheden in een willekeurige volgorde opgelijst worden: Ice hoeft dus niet per se voor Fire of Rock te staan! We krijgen dan (pokemon.4.csv6).
#,Name,Types,Total,HP,Attack,Weaknesses,Strength 493,Arceus,Normal,720,120,120,Fighting,strong 483,Dialga,Steel;Dragon,680,100,120,Fighting;Ground,strong 250,Ho-oh,Fire;Flying,680,106,130,Electric;Water;Rock,strong 150,Mewtwo,Psychic,680,106,110,Bug;Ghost;Dark;Flying;Fairy,strong 484,Palkia,Water;Dragon,680,90,120,Dragon;Fairy,strong 643,Reshiram,Dragon;Fire,680,100,120,Rock;Dragon;Ground,strong …
Herstel de nummering in het eerste veld (#) van het bestand, zodat de eerste regel na de hoofding het nummer 1 heeft en de volgende regels telkens een volgend nummer krijgen. We krijgen dan (pokemon.5.csv7).
#,Name,Types,Total,HP,Attack,Weaknesses,Strength 1,Arceus,Normal,720,120,120,Fighting,strong 2,Dialga,Steel;Dragon,680,100,120,Fighting;Ground,strong 3,Ho-oh,Fire;Flying,680,106,130,Electric;Water;Rock,strong 4,Mewtwo,Psychic,680,106,110,Bug;Ghost;Dark;Flying;Fairy,strong 5,Palkia,Water;Dragon,680,90,120,Dragon;Fairy,strong 6,Reshiram,Dragon;Fire,680,100,120,Rock;Dragon;Ground,strong …