Admin Linux - commande de tri

sorta plusieurs optimisations pour le tri en fonction des types de données. Cette commande écrit la concaténation triée de tous les fichiers sur la sortie standard. Cependant, soyez las, les opérations de tri complexes sur des fichiers volumineux de quelques GigaBytes peuvent nuire aux performances du système.

Lors de l'exécution d'un serveur de production avec une disponibilité limitée du processeur et / ou de la mémoire, il est recommandé de décharger ces fichiers plus volumineux sur un poste de travail pour les opérations de tri pendant les heures de pointe.

Commutateur action
-b Ignorer les premières lignes vides
-ré Ordre du dictionnaire, ne considérez que les blancs et les caractères alphanumériques
-F Ignorer la casse, plier les caractères inférieurs et supérieurs
-g Tri numérique général
-M Tri par mois
-h Tri numérique lisible par l'homme 1 Ko, 1 Mo, 1 Go
-R Tri aléatoire
-m Fusionner les fichiers déjà triés

N'hésitez pas à copier le texte tabulaire ci-dessous et à suivre nos exemples de tri. Assurez-vous que chaque colonne est séparée par un caractère de tabulation.

Prénom nom de famille Bureau
Ted Daniel 101
Jenny Côlon 608
Dana Maxwell 602
Marian Peu 903
Bobbie Chapman 403
Nicolas Singleton 203
Vallée Barton 901
Aaron Dennis 305
Santos Andrews 504
Jacqueline Neal 102
Gamelle Crawford 301
Rosa Étés 405
Kellie Curtis 903
Mat Davis 305
Gina Carr 902
Francisco Gilbert 101
Sidney Mack 901
Heidi Simmons 204
Cristina Torres 206
Sonya Tisserand 403
Donald Evans 403
Gwendolyn Chambres 108
Antonia Lucas 901
Blanche Hayes 603
Carrie Todd 201
Terence Anderson 501
Joan Parsons 102
Rose Pêcheur 304
Malcolm Matthews 702

En utilisant sort dans sa forme par défaut la plus élémentaire -

[[email protected] centos]# sort ./Documents/names.txt  
Aaron         Dennis         305 
Antonia       Lucas          901 
Billy         Crawford       301 
Blanche       Hayes          603 
Bobbie        Chapman        403 
Carrie        Todd           201 
Cristina      Torres         206 
Dale          Barton         901 
Dana          Maxwell        602 
Donald        Evans          403 
Francisco     Gilbert        101 
Gina          Carr           902 
Gwendolyn     Chambers       108 
Heidi         Simmons        204 
Jacqueline    Neal           102 
Jenny         Colon          608 
Joan          Parsons        102 
Kellie        Curtis         903 
Malcolm       Matthews       702 
Marian        Little         903 
Matt          Davis          305 
Nicolas      Singleton       203 
Rosa         Summers         405 
Rose         Fisher          304 
Santos       Andrews         504 
Sidney       Mack            901 
Sonya        Weaver          403 
Ted          Daniel          101 
Terence      Anderson        501

[[email protected] centos]#

Parfois, nous voudrons trier les fichiers sur une autre colonne, autre que la première colonne. Un tri peut être appliqué à d'autres colonnes avec le-t et -k commutateurs.

-t : define a file delimiter 
-k : key count to sort by (think of this as a column specified from the delimiter. 
-n : sort in numeric order

Note- Dans certains exemples, nous avons utilisé cat piped dans grep. C'était pour démontrer les concepts des commandes de tuyauterie. La sortie de cat dans grep peut augmenter la charge du système des centaines de fois avec des fichiers volumineux, tout en ajoutant un tri complexe. Cela fera grincer des dents les administrateurs Linux chevronnés.

Maintenant que nous avons une bonne idée du fonctionnement du caractère pipe, cette mauvaise pratique sera évitée dans les chapitres à suivre. La clé pour maintenir les ressources système faibles avec des commandes telles que sort, est d'apprendre à les utiliser efficacement.

[[email protected] centos]# sort -t '    ' -k 3n ./Documents/names.txt  
Ted           Daniel           101 
Francisco     Gilbert          101 
Jacqueline    Neal             102 
Joan          Parsons          102 
Gwendolyn     Chambers         108 
Carrie        Todd             201 
Nicolas       Singleton        203 
Heidi         Simmons          204 
Cristina      Torres           206 
Billy         Crawford         301 
Rose          Fisher           304 
Aaron         Dennis           305 
Matt          Davis            305 
Bobbie        Chapman          403 
Donald        Evans            403 
Sonya         Weaver           403 
Rosa          Summers          405 
Terence       Anderson         501 
Santos        Andrews          504 
Dana          Maxwell          602 
Blanche       Hayes            603 
Jenny         Colon            608 
Malcolm       Matthews         702
Antonia       Lucas            901 
Dale          Barton           901 
Sidney        Mack             901 
Gina          Carr             902 
Kellie        Curtis           903  
Marian        Little           903 

[[email protected] centos]#

Maintenant, nous avons notre liste triée par numéro de bureau. Le lecteur avisé remarquera quelque chose qui sort de l'ordinaire après la-tcommutateur; guillemets simples séparés par ce qui semble être quelques espaces. Il s'agissait en fait d'un caractère Tab littéral envoyé au shell. Un onglet littéral peut être envoyé au shell BASH en utilisant la combinaison de touches de:control+Tab+v.

La plupart des shells interpréteront la touche Tab comme une commande. Par exemple, l'auto-complétion dans BASH. Le shell a besoin d'une séquence d'échappement pour reconnaître un caractère Tab littéral. C'est l'une des raisons pour lesquelles les onglets ne sont pas le meilleur choix pour les délimiteurs sous Linux. D'une manière générale, il est préférable d'éviter à la fois les espaces et les tabulations, car ils peuvent causer des problèmes lors de la création de scripts d'un shell.

Corrigeons notre fichier names.txt.

[[email protected] centos]# sed -i 's/\t/:/g' ./Documents/names.txt && 
cat ./Documents/names.txt 
Ted:Daniel:101 
Jenny:Colon:608 
Dana:Maxwell:602 
Marian:Little:903 
Bobbie:Chapman:403 
Nicolas:Singleton:203 
Dale:Barton:901 
Aaron:Dennis:305 
Santos:Andrews:504 
Jacqueline:Neal:102 
Billy:Crawford:301 
Rosa:Summers:405 
Kellie:Curtis:903: 
Matt:Davis:305 
Gina:Carr:902 
Francisco:Gilbert:101 
Sidney:Mack:901 
Heidi:Simmons:204 
Cristina:Torres:206
Sonya:Weaver:403 
Donald:Evans:403 
Gwendolyn:Chambers:108 
Antonia:Lucas:901 
Blanche:Hayes:603 
Carrie:Todd:201 
Terence:Anderson:501 
Joan:Parsons:102 
Rose:Fisher:304 
Malcolm: Matthews:702 
[[email protected] centos]#

Maintenant, il sera beaucoup plus facile de travailler avec le fichier texte. Si quelqu'un demande qu'il soit renvoyé à Tab délimité pour une autre application (c'est courant), nous pouvons accomplir cette tâche facilement comme -

sed -i 's/:/\t/g' ./Documents/names.txt

Les applications courantes pour les utilisateurs finaux fonctionneront bien avec les onglets comme délimiteur (un comptable ne veut pas voir de deux-points séparant les colonnes de données, tout en travaillant sur des feuilles de calcul.). Donc, apprendre à transformer les personnages dans les deux sens est une bonne pratique; cela revient souvent.

Note- Office utilise des traitements de texte et des feuilles de calcul avec une interface utilisateur graphique, fonctionnant sous Windows. Par conséquent, il est courant pour les administrateurs Linux de réussir à mener à bien les actions de transformation, en accueillant les utilisateurs du bureau final (la plupart du temps, notre patron sera un utilisateur final).

Introduit était une commande appelée sed. sed est un éditeur de flux et peut être utilisé comme éditeur de texte non interactif pour manipuler des flux de texte et de fichiers. Nous en apprendrons plus sur sed plus tard. Cependant, gardez à l'esprit que pour l'instant, en utilisant sed, nous avons évité d'avoir à diriger plusieurs commandes de filtre lors du changement de notre fichier texte. Ainsi, l'utilisation la plus efficace des outils disponibles.

Nous avons également introduit un opérateur shell Bash: && . && n'exécutera la deuxième commande que si la première commande se termine avec un statut réussi de «0».

[[email protected] centos]# ls /noDir &&  echo "You cannot see me" 
ls: cannot access /noDir: No such file or directory 
[[email protected] centos]# ls /noDir ;  echo "You cannot see me" 
ls: cannot access /noDir: No such file or directory 
You cannot see me 
[[email protected] centos]# ls /noDir ;  echo "You cannot see me"

Dans le code ci-dessus, notez la différence entre && et;? La première n'exécutera la deuxième commande que lorsque la première s'est terminée avec succès, tandis que; enchaîne simplement les commandes. Plus d'informations à ce sujet lorsque nous aborderons le script de commandes shell.