Goodreads1 is een social website waar je kan bijhouden welke boeken je gelezen hebt, hoe goed je ze vond, etc2. Je kan ook je eigen data exporteren om ze achteraf te analyseren. In goodreads.tsv3 staat mijn ge-exporteerde file met de boeken tot begin vorig jaar (die ik heb omgezet van een comma separated value bestand naar een tab separated value bestand om het iets eenvoudiger te maken hier).
We kunnen egrep
, cut
, en andere tekst-operaties gebruiken om dit bestand op een hacky manier te analyseren. (Opmerking! Voor grote, serieuze projecten, gebruik alsjeblieft een serieuze, robuuste CSV-file parser! Eentje die overweg kan met velden waar ook separators in staan, en newlines, etc. In Python kan je hier bijvoorbeeld de csv-module4 voor gebruiken.)
head
commando kan een configureerbaar aantal lijnen aan het begin van een bestand (of standard input) te printen. Gebruik dit om énkel de eerste regel (die met de hoofding) uit te printen, zodat je weet welke kolom wat bevat. (Zoek op in de man-pages welke opties voor head
je hier nodig hebt.)#
om aan te geven dat het commentaar is, op zo’n manier dat je die makkelijk met egrep -v
kan wegfilteren, maar hier dus niet. Pech!) Het tail
commando kan je gebruiken om de laatste regels van een bestand (of standard input) te printen. Gebruik dit om alle lijnen behalve de eerste uit te printen (kijk eens naar de man-page van tail
dus).egrep
wil filteren op ronde haakjes, dan moet je deze escapen door er een backslash voor te zetten: egrep '\(blabla\)'
… zoekt op de letterlijke string (blabla) met haakjes. (Anders is dit namelijk een groepering.) (Unieke lijsten kan je met uniq
verkrijgen.)sed
(en andere tools voor reguliere expressies) gaan proberen om ‘greedy’ te matchen. Dit wil zeggen dat ze zo ver als mogelijk een patroon gaan matchen als er een *
of +
staat (dus tot het patroon dat na die sub-expressie staat gematcht wordt). Je kan dus perfect vragen om te zoeken op alles wat voorafgaat op een sequentie van karakters. Combineer dit idee met het feit dat een reeksnaam gevolgd wordt door een komma en een hekje.:)
Ik weet ook dat je hier makkelijk kan valsspelen door de juiste uitvoer gewoon naar het scherm te printen; probeer de uitdaging voor jezelf aan te gaan om hier een echte pijplijn van te maken :)