Κανόνες και παραδείγματα της εντολής ταξινόμησης Linux

Δεδομένα σε α Linux Το αρχείο κειμένου μπορεί να ταξινομηθεί με την εντολή sort αρκεί κάθε στοιχείο να είναι οριοθετημένο με κάποιο τρόπο. Συχνά, το κόμμα χρησιμοποιείται ως διαχωριστικό για οριοθετημένες πληροφορίες.

Επιχειρηματικός αναλυτής που εργάζεται σε φορητό υπολογιστή
David Lees / Iconica / Getty Images

Βασικοί κανόνες ταξινόμησης

Η εντολή sort αναδιατάσσει τις γραμμές σε ένα αρχείο κειμένου για να ταξινομήσει τις γραμμές αριθμητικά και αλφαβητικά. Οι προεπιλεγμένοι κανόνες για την εντολή ταξινόμησης είναι:

  • Το κείμενο που ξεκινά με έναν αριθμό εμφανίζεται πριν από το κείμενο που ξεκινά με ένα γράμμα. Κατώτεροι αριθμοί ταξινομήστε πρώτα.
  • Το κείμενο που ξεκινά με ένα γράμμα που εμφανίζεται στο αλφάβητο νωρίτερα από το πρώτο γράμμα άλλων καταχωρήσεων κειμένου ταξινομείται πριν από το κείμενο που ξεκινά με ένα γράμμα που εμφανίζεται αργότερα στο αλφάβητο.
  • Πότε κείμενο αρχίζει με κεφαλαία και πεζά στιγμιότυπα του ίδιου γράμματος, η πεζή περίπτωση ταξινομείται πρώτα.

Ταξινόμηση αρχείου κειμένου

Για να ταξινομήσετε τις γραμμές σε ένα οριοθετημένο αρχείο Linux, χρησιμοποιήστε την ταξινόμηση εντολή σαν αυτό:

ταξινόμηση -k2 table1.txt

Αυτή η εντολή ταξινομεί το αρχείο table1.txt σύμφωνα με τους χαρακτήρες που ξεκινούν από τη δεύτερη στήλη (k2 αναφέρεται στη δεύτερη στήλη). Υποθέτοντας ότι το περιεχόμενο του αρχείου εισόδου είναι:

1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
6, Elvis, Presley, Title 335, Τιμή 7,30 $
7, John, Lennon, Τίτλος 271, Τιμή 7,90 $
8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $

Επειδή η δεύτερη στήλη σε αυτό το παράδειγμα περιέχει πρώτα ονόματα, η ταξινομημένη έξοδος ταξινομείται με το πρώτο γράμμα του ονόματος κάθε ατόμου στη δεύτερη στήλη, όπως φαίνεται παρακάτω:

6, Elvis, Presley, Title 335, Τιμή 7,30 $
7, John, Lennon, Τίτλος 271, Τιμή 7,90 $
5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $
4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $

Εάν ταξινομήσετε το αρχείο με -k3 (χρησιμοποιώντας τα περιεχόμενα της γραμμής που ξεκινούν από τη στήλη 3, η στήλη Επώνυμο), η έξοδος είναι:

5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
7, John, Lennon, Τίτλος 271, Τιμή 7,90 $
6, Elvis, Presley, Title 335, Τιμή 7,30 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $
1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $

και -k5 παράγει μια λίστα ταξινομημένη κατά τιμή:

4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
7, John, Lennon, Τίτλος 271, Τιμή 7,90 $
6, Elvis, Presley, Title 335, Τιμή 7,30 $
8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $
5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $

Περιμένετε, αυτό δεν λειτούργησε, σωστά; Αντί για ταξινόμηση κατά τιμή, η εντολή ταξινόμησε τη λίστα με τον αριθμό τίτλου. Γιατί; Λοιπόν, εκτός και αν του δοθεί ο οριοθέτης στον οποίο πρέπει να σπάσει κάθε γραμμή σε στήλες, χρησιμοποιεί κενά. Δεδομένου ότι υπάρχει ένα κενό στη μέση κάθε καταχώρισης τίτλου, η στήλη τέταρτη σε κάθε καταχώρηση γίνεται η λέξη "Τίτλος" και η στήλη πέντε γίνεται ο αριθμός τίτλου.

Χρησιμοποιήστε τη σημαία -t για να καθορίσετε τον οριοθέτη για ταξινόμηση. Αυτό ελέγχει ακριβώς πού διαχωρίζει τις στήλες η εντολή.

ταξινόμηση -t, -k5 table1.txt

Αυτό παράγει το επιθυμητό αποτέλεσμα:

8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $
5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $
4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
6, Elvis, Presley, Title 335, Τιμή 7,30 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
7, John, Lennon, Τίτλος 271, Τιμή 7,90 $

Συνήθως, θα θέλετε να καθορίσετε τον οριοθέτη. Αποτρέπει την ανεπιθύμητη σύγχυση και τα ανακριβή αποτελέσματα. Αυτό ισχύει ιδιαίτερα για μεγαλύτερα αρχεία που μπορεί να μην είναι πάντα προφανώς λανθασμένα.

Αντιστρέψτε μια ταξινόμηση

ο -r η επιλογή αντιστρέφει την ταξινόμηση. Για παράδειγμα, χρησιμοποιώντας τα παραπάνω αποτελέσματα:

ταξινόμηση -r -t, -k5 table1.txt

αποδόσεις:

7, John, Lennon, Τίτλος 271, Τιμή 7,90 $
3, Mick, Jagger, Title 610, Τιμή 7,90 $
2, Taylor, Swift, Title 723, Τιμή 7,90 $
6, Elvis, Presley, Title 335, Τιμή 7,30 $
4, Lady, Gaga, Τίτλος 118, Τιμή 7,30 $
1, Justin, Timberlake, Τίτλος 545, Τιμή 7,30 $
5, Johnny, Μετρητά, Τίτλος 482, Τιμή 6,50 $
8, Michael, Jackson, Τίτλος 373, Τιμή 5,50 $

Αποθηκεύστε ένα ταξινομημένο αρχείο

Η ταξινόμηση ενός αρχείου δεν το αποθηκεύει. Για να αποθηκεύσετε την ταξινομημένη λίστα σε ένα αρχείο, χρησιμοποιήστε τον τελεστή ανακατεύθυνσης:

ταξινόμηση -k6 ​​table1.txt > test_new.txt

όπου test_new.txt είναι το νέο αρχείο.

Ταξινόμηση εξόδου ροής

Μπορείτε επίσης να εφαρμόσετε την εντολή ταξινόμησης στην έξοδο μιας ροής, όπως ο χειριστής σωλήνα:

ls -n | ταξινόμηση -t, -k5

Αυτό ταξινομεί την έξοδο της λίστας αρχείων που δημιουργείται από το ls εντολή ανά μέγεθος αρχείου, ξεκινώντας από τα μεγαλύτερα αρχεία. ο -n Ο χειριστής καθορίζει αριθμητική ταξινόμηση και όχι αλφαβητική.