Sommaire

Le tri des informations que l’on peut extraire de fichiers est très important. Il peut mettre en avant, lors d’un rapport envoyé par un cron par exemple, des informations pertinentes comme le nombre de mails envoyés par une machine, ou l’occupation d’un filesystem.

Les tris

 112345
 287689
 312
 42
 52
 62
 72222
 82222
 9127373
1012772
1144
1244
1344
1444
1544
1644
1744
1844
1944
2012
2112
2212
2328388238232

Tris par ordre alphabétique

sort text_to_sort 
12
12
12
12
12345
127373
12772
2
2
2
2222
2222
28388238232
44
44
44
44
44
44
44
44
44
87689

Tri par nombre entier

2
2
2
12
12
12
12
44
44
44
44
44
44
44
44
44
2222
2222
12345
12772
87689
127373
28388238232

Sortir des lignes uniques en cas de valeurs identiques multiples

sort -nu text_to_sort 
2
12
44
2222
12345
12772
87689
127373
28388238232

Avec la commande uniq

sort -n text_to_sort | uniq
2
12
44
2222
12345
12772
87689
127373
28388238232

Trier et compter le nombre d’occurrences

sort -n text_to_sort | uniq -c
      3 2
      4 12
      9 44
      2 2222
      1 12345
      1 12772
      1 87689
      1 127373
      1 28388238232

On peut aussi trier le résultat selon le premier champ

sort -n text_to_sort | uniq -c | sort -g
      1 12345
      1 127373
      1 12772
      1 28388238232
      1 87689
      2 2222
      3 2
      4 12
      9 44

Tri dans le sens inverse.

sort -n text_to_sort | uniq -c | sort -gr
      9 44
      4 12
      3 2
      2 2222
      1 87689
      1 28388238232
      1 12772
      1 127373
      1 12345

Trier selon des champs

1ABC;1;ZEF
2HGD;52;HJU
3ZYV;920;AER
4ABC;2;WWW
5HGD;0;ZZR

Tri numérique avec ; comme séparateur et sur le champ 2.

sort -n -t ';' -k 2 text_to_sort_sep
HGD;0;ZZR
ABC;1;ZEF
ABC;2;WWW
HGD;52;HJU
ZYV;920;AER

Tri alphabétique avec ; comme séparateur et sur le champ 1.

sort  -t ';' -k 1 text_to_sort_sep
ABC;1;ZEF
ABC;2;WWW
HGD;0;ZZR
HGD;52;HJU
ZYV;920;AER

Tri alphabétique avec ; comme séparateur et sur le champ 3.

sort  -t ';' -k 3 text_to_sort_sep
ZYV;920;AER
HGD;52;HJU
ABC;2;WWW
ABC;1;ZEF
HGD;0;ZZR

Tri alphabétique avec ; comme séparateur et sur le champ 1 puis sur le champ 2 en numérique.

sort -t ';' -k1,1 -k2,2n text_to_sort_sep
ABC;1;ZEF
ABC;2;WWW
HGD;0;ZZR
HGD;52;HJU
ZYV;920;AER

Tri alphabétique avec ; comme séparateur et sur le champ 1 puis sur le champ 2 en numérique inversé.

sort -t ';' -k1,1 -k2,2nr text_to_sort_sep
ABC;2;WWW
ABC;1;ZEF
HGD;52;HJU
HGD;0;ZZR
ZYV;920;AER

Trier une adresse IP V4

 1192.168.12.3
 2172.16.255.255
 3192.168.12.31
 4192.168.12.19
 5192.168.12.2
 6192.168.0.5
 710.0.0.1
 8172.24.13.43
 9255.255.255.255
100.0.0.0
1110.10.255.1
1210.2.2.15
1310.9.11.10
14172.16.0.255

Si je trie simplement par ordre alphabétique.

sort addr.txt 
0.0.0.0
10.0.0.1
10.10.255.1 <= incorrect
10.2.2.15
10.9.11.10
172.16.0.255
172.16.255.255
172.24.13.43
192.168.0.5
192.168.12.19 <= incorrect
192.168.12.2
192.168.12.3
192.168.12.31
255.255.255.255

La bonne solution : tri numérique avec . comme séparateur et sur le champ 1 puis 2 puis 3 puis 4.

sort -t '.' -k1,1n -k2,2n -k3,3n -k4,4n addr.txt 
0.0.0.0
10.0.0.1
10.2.2.15
10.9.11.10
10.10.255.1
172.16.0.255
172.16.255.255
172.24.13.43
192.168.0.5
192.168.12.2
192.168.12.3
192.168.12.19
192.168.12.31
255.255.255.255

Tri built-in de certaines commandes

ps

Sortir les 10 programmes qui consomment le plus de CPU.

ps -auxw --sort=-%cpu | head -11
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
vpn       1374  6.0  0.1  11716   888 pts/2    S+   22:04   0:00 grep --color=auto header
vpn       1373  5.2  0.2  10540  1116 pts/2    D+   22:04   0:00 find /
vpn       1248  1.4  0.5 106416  2712 ?        S    21:58   0:05 sshd: vpn@pts/0,pts/2
root         1  0.2  0.5  33384  2748 ?        Ss   21:57   0:00 /sbin/init
root        25  0.2  0.0      0     0 ?        S    21:57   0:01 [kworker/0:1]
root       122  0.1  0.0      0     0 ?        S    21:57   0:00 [kworker/u2:4]
vpn       1357  0.1  0.7  22384  3560 pts/2    Ss   22:04   0:00 -bash
root         2  0.0  0.0      0     0 ?        S    21:57   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    21:57   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   21:57   0:00 [kworker/0:0H]

Sortir les 10 commandes qui consomment le plus de mémoire.

ps -auxw --sort=-%mem | head -11
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
unbound   1025  0.0  1.3  49248  6944 ?        Ss   21:57   0:00 /usr/sbin/unbound
root      1277  0.0  0.7  22368  3680 pts/0    S    21:58   0:00 -su
vpn       1171  0.0  0.7  22404  3592 tty1     S+   21:57   0:00 -bash
vpn       1357  0.0  0.7  22384  3564 pts/2    Ss+  22:04   0:00 -bash
vpn       1249  0.0  0.7  22384  3560 pts/0    Ss   21:58   0:00 -bash
root       954  0.0  0.6  61364  3060 ?        Ss   21:57   0:00 /usr/sbin/sshd -D
root         1  0.0  0.5  33384  2748 ?        Ss   21:57   0:00 /sbin/init
root       717  0.0  0.4  10228  2428 ?        Ss   21:57   0:00 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
root      1275  0.0  0.4  65180  2288 pts/0    S    21:58   0:00 sudo su -
root      1115  0.0  0.4  78180  2176 tty1     Ss   21:57   0:00 /bin/login --    

ls

Trier selon la taille.

ls -Ss -1 *.txt
792180 result.txt
     8 res2.txt
     8 res3.txt
     4 addr.txt

Trier selon la taille, inversé.

ls -Ssr -1 *.txt
     4 addr.txt
     8 res3.txt
     8 res2.txt
792180 result.txt

Trié selon la date de modification du plus récent au plus ancien.

ls -tl *.txt
-rw-rw-r-- 1 seb seb       173 Sep 15 21:36 addr.txt
-rw-r--r-- 1 seb seb 811185105 Aug 25 19:51 result.txt
-rw-rw-r-- 1 seb seb      5431 Aug 12 14:13 res2.txt
-rw-rw-r-- 1 seb seb      5410 Aug 12 14:13 res3.txt

Trié selon la date de modification du plus ancien au plus récent.

ls -trl *.txt
-rw-rw-r-- 1 seb seb      5410 Aug 12 14:13 res3.txt
-rw-rw-r-- 1 seb seb      5431 Aug 12 14:13 res2.txt
-rw-r--r-- 1 seb seb 811185105 Aug 25 19:51 result.txt
-rw-rw-r-- 1 seb seb       173 Sep 15 21:36 addr.txt