awk avec pacman -Qi
Publié : 24 fév 2019, 18:54
Avec pacman -Qi nous pouvons avoir pas mal d'informations sur nos paquets mais il n'est pas forcément aisé d'afficher des informations pour un groupe de paquets. Débutons avec un exemple:
Rechercher uniquement les paquets Manjaro
Manjaro ne fabrique pour nous que quelques paquets sur les 11 000 dans nos dépots - les autres arrivent directement d'archlinux.
Comment les trouver ? par la signature du mainteneur
pacman -Qi | grep -E "^Pa.*manjaro.org"
... génial je vais avoir une liste ... mais il manque le nom du paquet !
Paqueteur : Philip Mueller <philm@manjaro.org>
Paqueteur : Bernhard Landauer <oberon@manjaro.org>
Paqueteur : Philip Müller <philm|manjaro|org>
Paqueteur : Philip Müller <philm|manjaro|org>
pacman -Qi
fait un "pacman -Qi" pour tous nos paquets installés , on peut le remplacer par un "pacman -Si" pour avoir tous les paquets installés ou nonNotre problème ici est de retourner 2 lignes différentes : le nom du paquet + le nom du mainteneur
grep ne le permet pas mais nous avons
awk
Notre commande devient:
pacman -Si | awk -F: '/^Nom/ {name=$2} /^Paque.*manjaro.org/ {print name" \t "$2}'
unixbench Jonathon Fernyhough <jonathon@manjaro.org>
update-notifier Philip Mueller <philm@manjaro.org>
vala-panel Stefano Capitani <stefano@manjaro.org>
nous recherchons une ligne qui débute par "Nom" et sauvegardons la deuxième colonne dans la variable name
/^Nom/ {name=$2}
puis, nous recherchons la ligne débutant par "Paque" et affichons la variable "name" et la seconde colonne de cette ligne
/^Paque.*manjaro.org/ {print name" \t "$2}
Pour aller un peu plus loin, nous pouvons formater la sortie pour aligner les colonnes. La fonction printf est disponible avec awk ; cela donne:
{printf "%-26s %s\n",name,$2}
name est affiché sur 26 caractères puis la description
unixbench Jonathon Fernyhough <jonathon@manjaro.org>
update-notifier Philip Mueller <philm@manjaro.org>
vala-panel Stefano Capitani <stefano@manjaro.org>
#!/usr/bin/bash
# commande pacman-manjaro
# liste des paquets de manjaro
pacman -Si | awk -F: '/^Nom/ {name=$2} /^Paque.*manjaro.org/ {printf "%-26s %s\n",name,$2}'
# pour une version internationale :
#LANG=C pacman -Si | awk -F: '/^Name/ {name=$2} /^Pack.*manjaro.org/ {printf "%-26s %s\n",name,$2}'
Maintenant nous pouvons réutiliser cette structure pour d'autres listes, par exemple:
#!/usr/bin/bash
# commande pacman-orphelins
# orphelins avec description
[[ "$(pacman -Qdtq | wc -l)" < 1 ]] && exit 0
LANG=C pacman -Qdti | awk -F: '/^Name/ {name=$2} /^Desc/ {printf "%-26s %s\n",name,$2}'
# nous pouvons même rajouter l'url pour plus d'infos disponible par un simple clic souris
#LANG=C pacman -Qdti | awk -F: '/^Name/ {name=$2} /^URL/ {url=$2":"$3} /^Desc/ {printf "%-26s %s %s\n",name,$2,url}'
#!/usr/bin/bash
# commande pacman-modified
# paquets avec une configuration modifiée par nous
LANG=C pacman -Qii | awk -F'[:\t]' '/^Name/ {name=$2} /^MODIFIED/ {printf "%-26s %s\n",name,$2}'