Linux Scripting Κεφάλαιο 7 – Η εντολή sort και πως χρησιμοποιείται

Δημοσιεύτηκε από τον/την codebrakes στις

Linux Scripting
Κεφάλαιο 7 - Η εντολή sort και πως χρησιμοποιείται

Λίγα λόγια για την εντολή sort

Η εντολή sort χρησιμοποιείται για να ταξινομήσουμε το περιεχόμενο ενός αρχείου (π.χ. κατά αύξουσα σειρά). Η εντολή sort συντάσσεται στο τερματικό των linux ως εξής.

sort “όνομα αρχείου”

Ας δούμε ένα παράδειγμα, έστω ότι έχουμε δημιουργήσει ένα αρχείο με το όνομα sortfile το οποίο έχει τα εξής περιεχόμενα:

  • Unix
  • Linux
  • Solaris
  • AIX
  • Linux
  • HPUX

Το αποτέλεσμα της εντολής sort θα ταξινομήσει τα παραπάνω στοιχεία κατά αλφαβητική σειρά.

Terminal Linux
codebrakes@mint : ~ $  cat sortfile—–> Δημιουργία ενός αρχείου με όνομα sortfile
Unix
Linux
Solaris
AIX
Linux
HPUX

codebrakes@mint : ~ $  sort sortfile —–> Ταξινόμιση περιεχομένων αρχείου sortfile με αλαφαβητική σειρά
AIX
HPUX
Linux
Linux
Solaris
Unix

Ταξινόμηση περιεχομένων και αφαίρεση διπλότυπων εγγραφών με την sort

Στο παραπάνω παράδειγμα είδαμε ότι εμφανίζεται 2 φορές η λέξη Linux. Με την επιλογή –u μπορούμε να ταξινομήσουμε ένα αρχείο και να αφαιρέσει διπλότυπες λέξεις. Στο τερματικό των Linux θα μας εμφανίσει τα εξής:

Terminal Linux
codebrakes@mint : ~ $  sort -u sortfile —–> Αλφαβητική ταξινόμιση περιεχομένων αρχείου sortfile και αφαίρεση διπλότυπων στοιχείων
AIX
HPUX
Linux
Solaris
Unix

Ταξινόμηση αριθμητικών περιεχομένων

Ας δούμε ένα άλλο παράδειγμα. Έστω ένα αρχείο που περιέχει τους αριθμούς 5, 1, 4, 6, 3, 2. Με την εντολή sortfile μπορούμε να ταξινομήσουμε τα περιεχόμενα αυτού του αρχείου κατά αριθμητική σειρά.

Terminal Linux
codebrakes@mint : ~ $  cat sortfile
5
1
4
6
3
2

codebrakes@mint : ~ $  sort sortfile
1
2
3
4
5
6

Όπως παρατηρούμε τα δεδομένα ταξινομήθηκαν με βάση την αριθμητική τους σειρά. Ας δούμε όμως πάλι το ίδιο παράδειγμα αλλά με διαφορετικούς αριθμούς. Ας υποθέσουμε ότι έχουμε ένα αρχείο που περιέχει μερικούς διψήφιους αριθμούς 20, 19, 5, 49 και 200 το αποτέλεσμα που θα δούμε είναι.

Terminal Linux
codebrakes@mint : ~ $  cat sortfile
20
19
5
49
200

codebrakes@mint : ~ $  sort sortfile
19
20
200
49
5

Σε αυτό το παράδειγμα παρατηρούμε ότι αμέσως μετά το 20 ακολουθεί το 200 και μετά το 49 ακολουθεί το 5. Αυτό είναι απόλυτα φυσιολογικό καθότι η ταξινόμηση των δεδομένων γίνεται με βάση τον πρώτο αριθμό (όπου στην περίπτωση του 200 είναι το 2 και στην περίπτωση του 49 το 4). Συνεπώς οτιδήποτε υπάρχει μετά τον πρώτο αριθμό θα αγνοηθεί. Μπορούμε όμως να προσθέσουμε την επιλογή -n στην εντολή sort οπού μας δίνει την δυνατότητα να ταξινομήσουμε κανονικά τα αριθμητικά μας δεδομένα.

Terminal Linux
codebrakes@mint : ~ $  sort sortfile
19
20
200
49
5
codebrakes@mint : ~ $  sort -n sortfile
5
19
20
49
200

Ας δούμε επίσης άλλο ένα παράδειγμα ας υποθέσουμε ένα αρχείο το οποίο περιέχει τους float αριθμούς 2.333, 4.356, 1.535, 3.676 και 5.436. Το αποτέλεσμα θα έχει ως εξής.

Terminal Linux
codebrakes@mint : ~ $  cat sortfile
2.333
4.356
1.535
3.676
5.436

codebrakes@mint : ~ $  sort -n sortfile
1.535
2.333
3.676
4.356
5.436

Όπως παρατηρούμε τα δεδομένα μας ταξινομήθηκαν από τον μικρότερο αριθμό έως και τον μέγιστο. Τι θα συμβεί όμως αν θέλουμε τα αριθμητικά μας δεδομένα να αριθμηθούν από το μεγαλύτερο προς το μικρότερο. Προφανώς και η επιλογή -n δεν μπορεί να μας βοηθήσει εκεί οπότε θα χρησιμοποιήσουμε την επιλογή -nr.

Terminal Linux
codebrakes@mint : ~ $  sort -nr sortfile
5.436
4.356
3.676
2.333
1.535

Όπως παρατηρούμε τα δεδομένα μας ταξινομήθηκαν από τον μεγαλύτερο αριθμό έως και τον μικρότερο. Σε αυτό το σημείο ας δούμε πως γίνεται η αριθμητική ταξινόμηση 2 αρχείων.

Ταξινόμηση αριθμητικών περιεχομένων μεταξύ 2 αρχείων

Έστω 2 αρχεία sortfile1 και sortfile2 τα οποία περιέχουν τα εξής αριθμητικά δεδομένα

Terminal Linux
codebrakes@mint : ~ $  cat sortfile1
20
19
5
49
200

codebrakes@mint : ~ $  cat sortfile2
25
18
5
48
200

Μπορούμε λοιπόν με την την εντολή sort -n μπορούμε να ταξινομήσουμε τα περιεχόμενα αυτών των 2 αρχείων ως εξής.

Terminal Linux
codebrakes@mint : ~ $  sort -n sortfile1 sortfile2
5
5
18
19
20
25
48
49
200
200

Μπορούμε λοιπόν με την την εντολή sort -n μπορούμε να ταξινομήσουμε τα περιεχόμενα αυτών των 2 αρχείων ως εξής.Παρατηρούμε όμως ότι υπάρχουν διπλότυπα στοιχεία μεταξύ αυτών των δύο αρχείων. Με την επιλογή -nu μπορούμε επίσης να ταξινομήσουμε τα αριθμητικά δεδομένα δύο αρχείων και να αφαιρέσουμε διπλότυπα δεδομένα που υπάρχουν μεταξύ των 2 αυτών αρχείων.

Terminal Linux
codebrakes@mint : ~ $  sort -nu sortfile1 sortfile2
5
18
19
20
25
48
49
200

Ταξινόμηση αλφαριθμητικών δεδομένων

Ας υποθέσουμε ένα αρχείο το οποίο περιέχει τα εξής δεδομένα:

Terminal Linux
codebrakes@mint : ~ $  cat sortfile
Linux,20
Unix,30
AIX,25
Linux,25
Solaris,10
HPUX,100

Παρατηρούμε ότι τα δεδομένα μας αποτελούνται από λέξεις και αριθμούς όπου διαχωρίζονται με κόμμα. Οπότε στην περίπτωση αυτή μπορούμε με την εντολή sort να ταξινομήσουμε τα δεδομένα μας είτε αριθμητικά (δηλαδή με βάση τα δεδομένα που υπάρχουν μετά το κόμμα) είτε αλφαβητικά (δηλαδή με βάση τα δεδομένα που υπάρχουν πριν το κόμμα)

Terminal Linux
codebrakes@mint : ~ $  sort -t”,”-k1,1 sortfile
AIX,25
HPUX,100
Linux,20
Linux,25
Solaris,10
Unix,30

Με τον παραπάνω τρόπο ταξινομούμε τα δεδομένα μας με βάση τα δεδομένα που υπάρχουν πριν το κόμμα (δηλαδή κατά αλφαβητική σειρά)

Terminal Linux
codebrakes@mint : ~ $  sort -t”,”-k2,2 sortfile
Solaris,10
HPUX,100
Linux,20
AIX,25
Linux,25
Unix,30

Με τον παραπάνω τρόπο ταξινομούμε τα δεδομένα μας με βάση τα δεδομένα που υπάρχουν μετά το κόμμα (δηλαδή κατά αριθμητική σειρά και με βάση τον πρώτο αριθμό)

Terminal Linux
codebrakes@mint : ~ $  sort -t”,”-k2n,2 sortfile
Solaris,10
Linux,20
AIX,25
Linux,25
Unix,30
HPUX,100

Με τον παραπάνω τρόπο ταξινομούμε τα δεδομένα μας με βάση τα δεδομένα που υπάρχουν μετά το κόμμα (δηλαδή κατά αριθμητική σειρά με βάση τον συνολικό αριθμό)

Terminal Linux
codebrakes@mint : ~ $  sort -t”,”-k1,1 -u sortfile
AIX,25
HPUX,100
Linux,20
Solaris,10
Unix,30

Με τον παραπάνω τρόπο ταξινομούμε αλφαβητικά τα δεδομένα μας και αφαιρούμε τυχόν διπλότυπα δεδομένα.

Terminal Linux
codebrakes@mint : ~ $  sort -t”,”-k2nr,2 sortfile
HPUX,100
Unix,30
AIX,25
Linux,25
Linux,20
Solaris,10

Με τον παραπάνω τρόπο ταξινομούμε τα δεδομένα μας με βάση τα δεδομένα που υπάρχουν μετά το κόμμα (δηλαδή κατά αριθμητική σειρά με βάση τον συνολικό αριθμό από τον μεγαλύτερο έως και τον μικρότερο).

Τελευταία ενημέρωση: 11/05/2018

Κατηγορίες: Linux Scripting