Εντολές επεξεργασίας ταξινομημένων αρχείων

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Η εντολή ταξινόμησης

Η εντολή sort επιτρέπει την ταξινόμηση ενός αρχείου. Είναι υλοποιημένη για να χειρίζεται με ταχύτητα αρχεία μεγάλου μεγέθους. Επιτρέπει τον ορισμό του πεδίου Ν που θέλουμε να ταξινομήσουμε με την παράμετρο +Ν καθώς και του χαρακτήρα C που διαχωρίζει τα πεδία με την παράμετρο -tC.

Παράδειγμα:

athena:~> sort names | head
Aegean Health Institute
Aggelos Vouros
Alexandros Stratinakis
Antonis Anagnostou
Antonis Arxontoulis
Antonis Margaros
Argirios Alexopoulos
Aristea Mela
Aristidis Kalafatis
Athanasios Panousos

athena:~> sort names +1 | head
Syllogos Agapi
Tambakou Aikaterini
Argirios Alexopoulos
Antonis Anagnostou
Miltos Anagnostou
Maria Antoniou
Nikos Antoniou
Antonis Arxontoulis                           

athena:~> sort -t: +1 phones | head
Miltos Anagnostou:10025
Manolis Kalatzis:10706
Nikolas Tzanetis:10938
John Vidalis:11150
Konstantinos Kotis:11178
Ioannis Soutos:11601
Health Institute:12534
Health Institute:12535
Stamatis Skoutas:12887             

Σχεσιακές εντολές

Η εντολή join επιτρέπει τη σχεσιακή σύνδεση δύο ταξινομημένων αρχείων τα οποία δίδονται ως παράμετροι της εντολής. Με την παράμετρο -j N μπορεί να καθοριστεί το πεδίο N το οποίο αποτελεί κλειδί της σχέσης και την παράμετρο -tC ο χαρακτήρας C που διαχωρίζει τα πεδία.

Παράδειγμα:

athena:~> head -1 phones afm
==> phones <==
Health Institute:12534

==> afm <==
Health Institute:12534081         

athena:~> join -t: -j 1 phones afm | head
Health Institute:12534:12534081
Health Institute:12535:12534081
Rafail Melas:54460:54460443
Manolis Gerasimou:41434:41434613
Argirios Alexopoulos:58397:58397370
Vagelis Meletiou:96171:96171096
Kostas Tsesmelis:69012:69012955
Ioannis Vergis:29257:29257932
Athanasios Panousos:56251:56251538
Nikolas Tzanetis:10938:10938443                  

Η εντολή cut επιτρέπει την επιλογή ορισμένων μόνο πεδίων από ένα αρχείο. Με την παράμετρο -f N μπορεί να καθοριστεί το πεδίο N το οποίο θα επιλεχθεί και την παράμετρο -dC ο χαρακτήρας που διαχωρίζει τα πεδία.

Παράδειγμα:

athena:~> cut -d: -f 2 phones | head
12534
12535
54460
41434
58397
17429
96171
69012
29257
56251                               

Εντολές συσχέτισης

H εντολή uniq αφαιρεί ή επιλέγει επαναλαμβανόμες γραμμές σε ένα ταξινομημένο αρχείο.

Η εντολή comm με παραμέτρους ένα ζεύγος αρχείων εμφανίζει τις γραμμές οι οποίες εμφανίζονται στο ένα, στο άλλο ή και στα δύο αρχεία.

Παράδειγμα:

athena:~> cut -d: -f 1 phones | sort | uniq -d
Health Institute
Stratologiko Grapheio Samou
Vasilis Barekos                            

athena:~> sort phones >phones.sorted
athena:~> cut -d: -f 1 phones | sort | uniq -d | join - phones.sorted
Health Institute Institute:12534
Health Institute Institute:12535
Stratologiko Grapheio Samou Grapheio Samou:58221
Stratologiko Grapheio Samou Grapheio Samou:58222
Stratologiko Grapheio Samou Grapheio Samou:58223
Vasilis Barekos Barekos:61312
Vasilis Barekos Barekos:89584                      

Παράδειγμα

Με τις εντολές που έχουμε εξετάσει μέχρι τώρα και με τη χρήση ενός καταλόγου λέξεων είναι δυνατό να κατασκευάσουμε έναν απλό ελεγκτή ορθογραφίας. Ο ελεγκτής εκτελεί τα παρακάτω βήματα:
  1. Μετατρέπει όλες τα μη γράμματα σε άδειες γραμμές (tr -cs '[^A-Za-z]' '\n')
  2. Μετατρέπει όλα τα γράμματα σε πεζά (tr '[A-Z]' '[a-z]')
  3. Ταξινομεί το αποτέλεσμα (sort)
  4. Αφαιρεί τις κοινές λέξεις (uniq)
  5. Επιλέγει τις λέξεις που δεν εμφανίζονται στο λεξικό (comm -23 words)
Παράδειγμα

athena$ man ls |
tr -cs '[^A-Za-z]' '\n' |
tr '[A-Z]' '[a-z]' |
sort |
uniq |
comm -23 - words |
head

[path
abbreviation
abcdfgiklmnopqrstuxabcfglnqrsux
ables
according
affects
after