Τι είναι το awk
Υπάρχουν κάποια προγράμματα που έχουν αποδειχθεί τόσο σημαντικά και όμως δεν κατάφεραν να αποκτήσουν ένα κανονικό όνομα. Όταν οι Alfred V. Aho, Peter J. Wein-berger, και ο πολύς Brian W. Kernighan έγραψαν το πρώτο awk
το ονόμασαν με τα αρχικά τους. Ίσως γιατί δεν υπήρχε τότε κάτι άλλο που να κάνει αυτή την δουλεία. Και σαν πρόγραμμα κάνει κάτι απλό, φιλτράρει κείμενα. Και όμως ολόκληρες γλώσσες προγραμματισμού βγήκαν από αυτό. Αν σήμερα γραφείς σε Perl
(αλήθεια;) ή σε Python
ή σε Ruby
ίσως να μην ξέρεις την ταπεινή τους πρώτη καταγωγή.
Και όμως παρά το ότι είναι τόσο παλιό έχει ακόμα και σήμερα την χρησιμότητα του. Γιατί με μια γραμμή μπορείς να κάνεις πολλά που θα ήθελες 10 γραμμές σε μια άλλη γλώσσα. Κάποιοι δεν το θεωρούν καν γλώσσα προγραμματισμού, αλλά απλά ένα εργαλείο. Το πως θα το χαρακτηρίσεις δεν έχει καμία σημασία. Σήμερα χρησιμοποιούμε το gawk
την επαυξημένη “μοντέρνα” έκδοση του από το GNU και μάλλον το έχεις ήδη εγκατεστημένο.
Υπάρχουν τα βιβλία και το βιβλίο του είναι εξαιρετικά καλό, αλλά αντί για θεωρίες ας μιλήσουμε με παραδείγματα. Στο στυλ αυτού του άρθρου. Όπως θα το χρησιμοποιούσε κάποιος που δεν θέλει να διαβάσει πρώτα τις 570(!) σελίδες του βιβλίου του
Κατεβάζοντας ένα αρχείο με δεδομένα
Ας δούμε το awk
στην πράξη. Θα χρειαστούμε κάποιο αρχείο με δεδομένα. Ας κατεβάσουμε ένα αρχείο από το δίκτυο, μιας και έξω είναι ηφαίστειο ας δούμε τα ηφαίστεια του κόσμου
wget "https://data.humdata.org/dataset/a60ac839-920d-435a-bf7d-25855602699d/resource/e3b1ecf0-ec47-49f7-9011-6bbb7403ef6d/download/volcano.csv"
head volcano.csv
wc --lines volcano.csv
και το αρχείο μοιάζει κάπως έτσι
VolcanoID,V_Name,Country,Region,Subregion,Latitude,Longitude,PEI,H_active,VEI_Holoce,hazard,class,risk
210010,West Eifel Volcanic Field,Germany,Mediterranean and W Asia,Western Europe,50.170000000000000,6.850000000000000,6,0,Unknown VEI,NULL,U-HR,NULL
210020,Cha?ne des Puys,France,Mediterranean and W Asia,Western Europe,45.774999999999900,2.970000000000000,7,0,Unknown VEI,NULL,U-HR,NULL
210030,Olot Volcanic Field,Spain,Mediterranean and W Asia,Western Europe,42.170000000000000,2.530000000000000,5,0,No confirmed eruptions,NULL,U-NHHR,NULL
210040,Calatrava Volcanic Field,Spain,Mediterranean and W Asia,Western Europe,38.869999999999900,-4.020000000000000,6,0,Unknown VEI,NULL,U-HR,NULL
211001,Larderello,Italy,Mediterranean and W Asia,Italy,43.250000000000000,10.869999999999900,4,0,3,NULL,U-HR,NULL
Εναλλακτικά μπορείς να ανοίξεις το αρχείο στο libreoffice
και να το εξετάσεις.
Η πρώτη γραμμή λέει τι είναι κάθε τι. Έτσι το δεύτερο πεδίο είναι το όνομα του, το τρίτο η χώρα κλπ. Η πληροφορία αυτή είναι σημαντική. Θα την αφήσουμε έτσι για την ώρα, και ας μπλέκετε με τα δεδομένα. Το αρχείο περιέχει πληροφορίες για 1546 ηφαίστεια σε 1547 γραμμές.
Μια πρώτη επαφή
Ας δούμε πως θα πάρουμε τα ονόματα των ηφαιστείων. Μια πρώτη προσπάθεια
awk '{print $2}' volcano.csv
Αυτό που υπάρχει μέσα στα μονά εισαγωγικά είναι το πρόγραμμα του awk
. Περισσότερα για την σύνταξη αργότερα, αλλά για την ώρα αρκεί να ξέρουμε ότι δεν δουλεύει . Τρέξτε το και προσπαθήστε να καταλάβετε τι πήγε στραβά …
Ο λόγος μοιάζει να είναι πως χωρίζει τα πεδία με το κενό, ενώ εμείς θέλουμε με το ,
. Κάποιος μας ψιθυρίζει στο αυτή -F ","
ή σκέτο -F, και ξαναδοκιμάζουμε.
awk -F, '{print $2}' volcano.csv
Και δούλεψε , ε δηλαδή σχεδόν. Η αρίθμηση ξεκινάει στους υπολογιστές από το μηδέν αλλά στο awk ξεκινάει από το 1 .
Μόνος σου τώρα: Τύπωσε την χώρα και μετά τύπωσε την στήλη
EI_Holoce
Στο επόμενο βήμα θα βρούμε τα ηφαίστεια που είναι αλλού.
awk -F '/alu/ {print}' volcano.csv
Η σύνταξη της γλώσσας του awk είναι απλή. Το πρώτο κομμάτι είναι ένα φίλτρο που διαλέξει γραμμές. Εδώ χρησιμοποιούμε ένα regular expression
. Αν δεν ξέρεις τι είναι αυτό θα μάθεις μέχρι το τέλος της σειράς. Το δεύτερο κομμάτι ανάμεσα στα {}
θα βρει όλες τις γραμμές που περιέχουν κάπου τα γράμματα 'alu'
Ας δούμε τα ηφαίστεια το ελλαδικού χώρου
awk -F, '$3=="Greece" {print $2,"->",$3 }' volcano.csv
Μπορείς να βρεις την επικινδυνότητα τους;
Πόσα ηφαίστεια έχει η Τουρκία;
Αυτά για σήμερα και αν υπάρξει ενδιαφέρον έχουμε να πούμε πολλά ακόμα. Και βέβαια να θέλεις να πεις εσύ για το awk
ή για κάποιο άλλο πρόγραμμα το φορουμ υπάρχει και για αυτό τον λόγο.
Έχεις κάποιο αρχείο με δεδομένα, μικρό ή μεγάλο, σε κείμενο σε απλή μορφή (το awk βγήκε πριν την xml και το json) μπορείς να το δημοσιεύσεις και θέλεις να δούμε μαζί τι πληροφορίες μπορούμε να εξάγουμε από αυτό; Πόσταρε ένα σύνδεσμο σε αυτό