Op het einde van de jaren vijftig bouwde de Amerikaanse regering een bunker onder het luxe resort The Greenbrier1 in White Sulphur Springs (West Virginia, Verenigde Staten) om de Amerikaanse vorm van constitutionele regering te kunnen voortzetten als er een nucleaire oorlog zou uitbreken. De ondergrondse atoomschuilkelder kon 535 congresleden en 565 personeelsleden huisvesten, met aparte kamers voor het Huis en de Senaat en een zaal die groot genoeg was om gezamenlijke zittingen te houden.

The Greenbrier
The Greenbrier is een luxe resort in de Allegheny Mountains in de buurt van White Sulphur Springs in Greenbrier County, West Virginia, in de Verenigde Staten.

Niemand die bij de bouw betrokken was, kreeg te horen wat ze daar aan het bouwen waren, maar het was duidelijk genoeg. Randy Wickline, die 50.000 ton beton naar de locatie vervoerde, zag muren van twee voet dik en een betonnen dak begraven onder zes voet aarde. Aan de Washington Post-verslaggever Ted Gup verklaarde hij:

Er was niemand die ons kwam zeggen dat het een schuilkelder was, maar je kon vrij goed zien dat ze daar iets aan het bouwen waren dat niet alleen diende om de regen buiten te houden.

Een andere aannemer — die gevraagd was om een "tentoonstellingshal" te bouwen — zei:

We hebben daar net 110 urinoirs geïnstalleerd. Wat gaan ze daar in godsnaam tentoonstellen?

Uiteindelijk uitten ook verschillende leden van het Congres zelf bedenkingen. Huisspreker "Tip" O'Neill zei:

Jezus, denk je dat ik thuis ga weglopen en mijn vrouw daar achterlaat? Dit is de gekste bouwvergunning die ons land ooit heeft afgeleverd.

Kort nadat het verhaal van Gup in 1992 verscheen, werd de schuilkelder gesloten.

Opgave

Het tekstbestand permits.csv2 bevat informatie over alle bouwvergunningen die de stad San Fransico (Verenigde Staten) in de periode 2013–2018 heeft afgeleverd. De eerste regel van het bestand bevat een hoofding. Elke volgende regel bevat informatie over één bouwvergunning, bestaande uit de volgende zeven velden die van elkaar gescheiden worden door een puntkomma (;):

  1. Permit Number: uniek identificatienummer voor de bouwvergunning

  2. Permit Creation Date: datum waarop de bouwvergunning geregistreerd werd; voorgesteld in het Amerikaanse datumformaat (mm/dd/yyyy)

  3. Lot: uniek identifcatienummer voor het stuk bouwgrond (het lot) waarvoor de bouwvergunning werd afgeleverd; het grondgebied van San Fransico wordt in stukken (loten) verdeeld, en de eigenaar van elk lot wordt bijhouden in een kadaster

  4. Street Name: naam van de straat waar het lot zich bevindt

  5. Street Suffix: afkorting voor het soort straat; zo staat St bijvoorbeeld voor Street, Av voor Avenue, en Wy voor Way

  6. Description: tekstuele beschrijving van de toegestane wijziging aan de bestaande bebouwing van het lot

  7. Permit Expiration Date: vervaldatum voor de bouwvergunning; na deze datum moet een nieuwe bouwaanvraag ingediend worden als de wijzigingen aan de bestaande bebouwing op dat moment nog niet doorgevoerd werden

De inhoud van een veld bevat zelf nooit puntkomma's.

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. Alle opdrachten moeten na elkaar uitgevoerd worden. De opdrachten mogen de eerste regel niet wijzigen, tenzij dit expliciet anders vermeld staat. Ter controle kan je gebruikmaken van de meegeleverde bestanden permits.i.csv (ZIP3), die telkens de inhoud van het bestand bevatten nadat de $$i$$-de opdracht werd uitgevoerd.

  1. Verwijder alle regels uit het bestand waarvan het soort straat (Street Suffix) niet Av, St of Wy is. Zo moet

    Permit Number;Permit Creation Date;Lot;Street Name;Street Suffix;Description;Permit Expiration Date
    201404233987;04/23/2014;19;Cole;St;repair front staircase and front entry in kind.;04/24/2015
    201301047225;01/04/2013;24;Lombard;St;"install anchor bolts, tie downs, shear wall and clips as needed";12/30/2013
    201504214151;04/21/2015;40;Clement;Av;interior iprovement of pharmacy.;06/22/2018
    201510068903;10/06/2015;7;02nd;Dr;tenant improvement: 3rd floor spec suite a;09/29/2018
    201611011613;11/01/2016;69;Madison;Wy;reroofing;10/27/2017
    201606170254;06/17/2016;71;05th;St;"6th flr:  fire alarm, replace two existing speakers w/speaker strobes.";06/12/2017
    …

    bijvoorbeeld omgezet worden naar (permits.1.csv4)

    Permit Number;Permit Creation Date;Lot;Street Name;Street Suffix;Description;Permit Expiration Date
    201404233987;04/23/2014;19;Cole;St;repair front staircase and front entry in kind.;04/24/2015
    201301047225;01/04/2013;24;Lombard;St;"install anchor bolts, tie downs, shear wall and clips as needed";12/30/2013
    201504214151;04/21/2015;40;Clement;Av;interior iprovement of pharmacy.;06/22/2018
    201611011613;11/01/2016;69;Madison;Wy;reroofing;10/27/2017
    201606170254;06/17/2016;71;05th;St;"6th flr:  fire alarm, replace two existing speakers w/speaker strobes.";06/12/2017
    …
  2. Er zijn nu nog drie soorten straten (Street Suffix): Av, St, en Wy. Dit zijn afkortingen voor respectievelijk Avenue, Street, en Way. Voeg nu de straatnaam (Street Name) en het soort straat (Street Suffix) samen tot één veld (Full Street Name), waarin eerst de straatnaam staat, dan een spatie en dan lange naam van het soort straat. Zo moet de straat met naam Lombard en soort St na het samenvoegen weergegeven worden als Lombard Street. We krijgen dan (permits.2.csv5)

    Permit Number;Permit Creation Date;Lot;Full Street Name;Description;Permit Expiration Date
    201404233987;04/23/2014;19;Cole Street;repair front staircase and front entry in kind.;04/24/2015
    201301047225;01/04/2013;24;Lombard Street;"install anchor bolts, tie downs, shear wall and clips as needed";12/30/2013
    201504214151;04/21/2015;40;Clement Avenue;interior iprovement of pharmacy.;06/22/2018
    201611011613;11/01/2016;69;Madison Way;reroofing;10/27/2017
    201606170254;06/17/2016;71;05th Street;"6th flr:  fire alarm, replace two existing speakers w/speaker strobes.";06/12/2017
    …
  3. Zet de registratiedatum (Permit Creation Date) om van het Amerikaanse datumformaat (mm/dd/yyyy) naar het internationale datumformaat (yyyy-mm-dd; ISO 86016). We krijgen dan (permits.3.csv7)

    Permit Number;Permit Creation Date;Lot;Full Street Name;Description;Permit Expiration Date
    201404233987;2014-04-23;19;Cole Street;repair front staircase and front entry in kind.;04/24/2015
    201301047225;2013-01-04;24;Lombard Street;"install anchor bolts, tie downs, shear wall and clips as needed";12/30/2013
    201504214151;2015-04-21;40;Clement Avenue;interior iprovement of pharmacy.;06/22/2018
    201611011613;2016-11-01;69;Madison Way;reroofing;10/27/2017
    201606170254;2016-06-17;71;05th Street;"6th flr:  fire alarm, replace two existing speakers w/speaker strobes.";06/12/2017
    …
  4. Sorteer de bouwvergunningen volgens oplopende registratiedatum (Permit Creation Date). Als er meerdere bouwvergunningen op dezelfde dag geregistreerd werden, dan moeten ze verder gesorteerd worden volgens dalend lotnummer (Lot), en daarna alfabetisch op straatnaam (Full Street Name). We krijgen dan (permits.4.csv8)

    Permit Number;Permit Creation Date;Lot;Full Street Name;Description;Permit Expiration Date
    201501216214;2012-09-11;79;Summit Way;type b - erect 2-s;03/25/2018
    201301027096;2013-01-02;39;12th Avenue;#1:  convert (e) closet to full bathroom.;01/04/2014
    201301037138;2013-01-03;47;Quintara Street;voluntary lateral strengthening;
    201301037190;2013-01-03;20;Leland Avenue;reroofing;12/29/2013
    201301037191;2013-01-03;15;Presidio Avenue;reroofing;12/29/2013
    …
  5. Kort beschrijvingen (Description) die langer zijn dan 20 tekens af door enkel de eerste 17 tekens over te houden en die te laten volgen door drie punten (...). Beschrijvingen die hoogstens uit 20 tekens bestaan, mogen dus niet gewijzigd worden. We krijgen dan (permits.5.csv9)

    Permit Number;Permit Creation Date;Lot;Full Street Name;Description;Permit Expiration Date
    201501216214;2012-09-11;79;Summit Way;type b - erect 2-s;03/25/2018
    201301027096;2013-01-02;39;12th Avenue;#1:  convert (e) ...;01/04/2014
    201301037138;2013-01-03;47;Quintara Street;voluntary lateral...;
    201301037190;2013-01-03;20;Leland Avenue;reroofing;12/29/2013
    201301037191;2013-01-03;15;Presidio Avenue;reroofing;12/29/2013
    …

Bronnen