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