cut : Retirer des sections de texte
Table des matières
Section AWK développée ici : https://www.linuxtricks.fr/wiki/awk-chercher-et-manipuler-du-texte-mais-pas-que
Il peut être utile d'extraire la liste des utilisateurs sur la machine linux. Pour cela, on peut utiliser la commande :
Avec ceci, nous aurons tous les utilisateurs.
On peut afficher dans la même commande plusieurs champs (ici le nom et le UID) :
Il est possible, de rajouter du texte dans le "print" en entourant le texte de guillemets.
Mieux encore, on peut tester une variable dans cette commande. Sous Mageia, les utilisateurs normaux (non créés par un service tel apache, mysql, etc.) ont un UID supérieur ou égal à 500. Voici un exemple de la liste des utilisateurs dont l'UID est supérieur ou égal à 500:
Ou pour n'afficher que leur nom:
Dans awk, on peut aussi tester des chaines !
Encore un truc marrant, avec la commande ci-dessous, on affiche les lignes de moins de 10 caractères. Je grep pour ne pas afficher les commentaires et lignes commençant par un espace ou lignes vides.
Pour récupérer la fréquence du CPU0 (premier résultat) , on peut utiliser la commande ci-dessous :
Récupère dans le fichier /proc/acpi/bbswitch le deuxième champ. Si c'est ON on écrit ALLUME si c'est OFF, on affiche ETEINT
On souhaite récupérer les PID des programmes proserv2 n'écoutant pas sur 127.0.0.1. Utile au travail, j'ai galéré pour trouver donc je note :
Si on a besoin de filtrer par exemple sur l'IP et que c'est dans une variable d'un script, on ferme la commande awk avec le simple guillemet, et on met entre guillemets la variable :
La commande suivante me donne la température du système :
Je veux récupérer 46 avec 1 seule commande awk. On va utiliser les fonctions de awk gsub qui permettent de remplacer du texte (on va supprimer le +) et la fonction split pour couper avec le délimiteur"." et récupérer le champ N°1 (split envoie dans un tableau) :
Ici, je récupère la mémoire RAM avec free, et je veux en sortir le pourcentage utilisé.
Dans free la 3ème valeur est l'utilisée, la 2ème est la totale, on fait la division, on utilise la fonction "int" pour ne pas avoir de virgule et on ajoute le texte "%" :
CUT permet de supprimer une partie de chaque ligne d'un fichier, ou d'une commande en fonction d'un champ séparateur.
J'utilise CUT pour des "petites opérations"
cut s'utilise de cette façon:
-d<sep> : Sert à définir le séparateur de champ.
-f<nb> : Sert à définir <nb> champ à garder.
On peut récupérer la liste des utilisateurs du système :
Dans cet exemple, j'effectue une suite de commandes avec 3 cut derrière un grep qui lui même est derrière une commande:
TR permet de traduire ou supprimer des caractères
tr s'utilise de cette façon:
-d caractere : Sert à supprimer le caractère au lieu de remplacer
Pour transformer cuicui en coucou :
Pour supprimer les saut de lignes (utile dans un pipe) on peut utiliser
- AWK
- Exemples
- Extraire les nom d'utilisateur et leur UID
- Afficher le nom des utilisateurs ayant un shell /bin/bash
- Afficher les lignes inférieures à 10 caractères
- Récupérer la fréquence du CPU1
- Afficher l'état de la carte NVidia Optimus
- Afficher les PID des programmes proserv2 n'écoutant pas sur 127.0.0.1
- Récupérer une température
- Faire un calcul
- Exemples
- CUT
- TR
AWK
Section AWK développée ici : https://www.linuxtricks.fr/wiki/awk-chercher-et-manipuler-du-texte-mais-pas-que
Exemples
Extraire les nom d'utilisateur et leur UID
Il peut être utile d'extraire la liste des utilisateurs sur la machine linux. Pour cela, on peut utiliser la commande :
Code BASH :
awk -F : '{print $1}' /etc/passwd
Avec ceci, nous aurons tous les utilisateurs.
On peut afficher dans la même commande plusieurs champs (ici le nom et le UID) :
Code BASH :
awk -F : '{print $1 $3}' /etc/passwd
Il est possible, de rajouter du texte dans le "print" en entourant le texte de guillemets.
Code BASH :
awk -F : '{print "User : " $1 " - GID : " $3}' /etc/passwd
Mieux encore, on peut tester une variable dans cette commande. Sous Mageia, les utilisateurs normaux (non créés par un service tel apache, mysql, etc.) ont un UID supérieur ou égal à 500. Voici un exemple de la liste des utilisateurs dont l'UID est supérieur ou égal à 500:
Code BASH :
awk -F : '$3 >= 500 {print "User : " $1 " - GID : " $3}' /etc/passwd
Ou pour n'afficher que leur nom:
Code BASH :
awk -F: '$3 >= 500 {print $1}' /etc/passwd
Afficher le nom des utilisateurs ayant un shell /bin/bash
Dans awk, on peut aussi tester des chaines !
Code BASH :
awk -F: '$NF == "/bin/bash" {print $1}' /etc/passwd
Afficher les lignes inférieures à 10 caractères
Encore un truc marrant, avec la commande ci-dessous, on affiche les lignes de moins de 10 caractères. Je grep pour ne pas afficher les commentaires et lignes commençant par un espace ou lignes vides.
Code BASH :
awk 'length < 10' /etc/samba/smb.conf | grep -v -E '^($|#| )'
Récupérer la fréquence du CPU1
Pour récupérer la fréquence du CPU0 (premier résultat) , on peut utiliser la commande ci-dessous :
Code BASH :
awk '/cpu MHz/ && (NR == 1) {print $4}' < /proc/cpuinfo
Afficher l'état de la carte NVidia Optimus
Récupère dans le fichier /proc/acpi/bbswitch le deuxième champ. Si c'est ON on écrit ALLUME si c'est OFF, on affiche ETEINT
Code BASH :
awk '{ if ($2=="OFF") print "ETEINT" ; if ($2=="ON") print "ALLUME" }' /proc/acpi/bbswitch
Afficher les PID des programmes proserv2 n'écoutant pas sur 127.0.0.1
On souhaite récupérer les PID des programmes proserv2 n'écoutant pas sur 127.0.0.1. Utile au travail, j'ai galéré pour trouver donc je note :
Code BASH :
netstat -laputen | awk ' !/127.0.0.1/ && /proserv2/ { split($9,tab,"/"); print tab[1] ;}'
Si on a besoin de filtrer par exemple sur l'IP et que c'est dans une variable d'un script, on ferme la commande awk avec le simple guillemet, et on met entre guillemets la variable :
Code BASH :
netstat -laputen | awk '/'"$ip"'/ && /proserv2/ { split($9,tab,"/"); print tab[1] ;}'
Récupérer une température
La commande suivante me donne la température du système :
Code BASH :
sensors | grep Tctl Tctl: +46.8°C
Je veux récupérer 46 avec 1 seule commande awk. On va utiliser les fonctions de awk gsub qui permettent de remplacer du texte (on va supprimer le +) et la fonction split pour couper avec le délimiteur"." et récupérer le champ N°1 (split envoie dans un tableau) :
Code BASH :
sensors | grep Tctl | awk '{ gsub("+",""); split($2,var,"."); print var[1]; }' 46
Faire un calcul
Ici, je récupère la mémoire RAM avec free, et je veux en sortir le pourcentage utilisé.
Dans free la 3ème valeur est l'utilisée, la 2ème est la totale, on fait la division, on utilise la fonction "int" pour ne pas avoir de virgule et on ajoute le texte "%" :
Code BASH :
free -m | head -2 | tail -1 | awk '{ print int($3/$2*100) "%"; }'
CUT
Présentation
Définition
CUT permet de supprimer une partie de chaque ligne d'un fichier, ou d'une commande en fonction d'un champ séparateur.
J'utilise CUT pour des "petites opérations"
cut s'utilise de cette façon:
Code BASH :
cut -options fichier
Les options
-d<sep> : Sert à définir le séparateur de champ.
-f<nb> : Sert à définir <nb> champ à garder.
Exemples
Récupérer la liste des utilisateurs du système:
On peut récupérer la liste des utilisateurs du système :
Code BASH :
cut -d: -f1 /etc/passwd
Récupérer la valeur de la température du processeur 0
Dans cet exemple, j'effectue une suite de commandes avec 3 cut derrière un grep qui lui même est derrière une commande:
Code BASH :
sensors | grep 'Core 0' | cut -d+ -f2 | cut -d\( -f1 | cut -d. -f1
TR
Présentation
Définition
TR permet de traduire ou supprimer des caractères
tr s'utilise de cette façon:
Code BASH :
tr -options motif1 motif2
Les options
-d caractere : Sert à supprimer le caractère au lieu de remplacer
Exemples
Convertir des symboles en d'autres
Pour transformer cuicui en coucou :
Code BASH :
echo cuicui | tr ui ou
Convertir toutes les MAJUSCULES en minuscules
Code BASH :
echo COUCOU | tr [:upper:] [:lower:]
Supprimer les saut de lignes
Pour supprimer les saut de lignes (utile dans un pipe) on peut utiliser
Code BASH :
commande1 | tr -d '\n' | commande2