Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

awk avec pacman -Qi

#1Messageil y a 2 mois

:bjr:
Avec pacman -Qi nous pouvons avoir pas mal d'informations sur nos paquets :gsourire: 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>
ps: 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 non

Notre 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}'
le résultat est :

 unixbench        Jonathon Fernyhough <jonathon@manjaro.org>
 update-notifier          Philip Mueller <philm@manjaro.org>
 vala-panel       Stefano Capitani <stefano@manjaro.org>
Explication de la commande awk
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>
Nous pouvons maintenant nous créer un alias ou un bash

#!/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}'

awk avec pacman -Qi

#2Messageil y a 2 mois

:salut: papajoke,

Merci pour ces scripts bien utiles ainsi que pour les explications claires et concises. :bien

J'ai simplement testé les commandes , pour l'instant, et seul la commande pacman-orphelins me retourne tout un tas de paquets qui ne le sont pas (orphelins). :confus:
Je suis sous zsh peut-être la raison de mes déboires avec cette commande ? :saispas:

awk avec pacman -Qi

#3Messageil y a 2 mois

:saispas:

il faut décomposer "ma" commande :
pacman -Qi $(pacman -Qdtq)
elle fait pacman -Qdtq puis un pacman -Qi de la liste retournée

Tu n'as pas la même liste en faisant un pacman -Qdtq classique ???

---
zsh ou bash ne change rien si tu as transformé ces scripts en fichiers bash, dans les 2 cas c'est bash qui va les interpréter.

awk avec pacman -Qi

#4Messageil y a 2 mois

:bjr:
En effet, c'est du pur bash:

$ LANG=C pacman -Qi $(pacman -Qdtq) | awk -F: '/^Name/ {name=$2} /^Desc/ {printf "%-26s %s\n",name,$2}'
 gconf                      An obsolete configuration database system
 libnm-gtk                  NetworkManager GUI client library (legacy)
 libwnck                    Window Navigator Construction Kit
 sharutils                  Makes so-called shell archives out of many files
C'est plutôt intéressant d'avoir un descriptif des orphelins que ne fournit pas pacman -Qdt:bien

$ pacman -Qdt
gconf 3.2.6+11+g07808097-4
libnm-gtk 1.8.19dev+21+geebf7f95-1
libwnck 2.31.0-2
sharutils 4.15.2-3
Edit: après nettoyage des orphelins avec sudo pacman -Rs $(pacman -Qdtq) quand je relance

$ LANG=C pacman -Qi $(pacman -Qdtq) | awk -F: '/^Name/ {name=$2} /^Desc/ {printf "%-26s %s\n",name,$2}'
 a52dec                     A free library for decoding ATSC A/52 streams
 aalib                      A portable ASCII art graphic library
 accountsservice            D-Bus interface for user account query and manipulation
 acl                        Access control list utilities, libraries and headers
 acpi                       Client for battery, power, and thermal readings
 acpid                      A daemon for delivering ACPI power management events with netlink support
 acsccid                    PC/SC driver that supports ACS CCID smart card readers.
 adapta-maia-theme          An adaptive Gtk+ theme based on Material Design Guidelines.Build with Manjaro Maia color

.......
..........
.......
 zstd                       Zstandard - Fast real-time compression algorithm
 zvbi                       VBI capture and decoding library
Plus d'orphelins, mais la quasi totalité des paquets installés sont listés et détaillés :roll:

awk avec pacman -Qi

#5Messageil y a 2 mois

pacman -Qdtq ne me renvoie rien, normal je nettoie régulièrement. :wink: Sinon pareil que lemust83, une liste longue comme le bras de paquets installés :pleure:

awk avec pacman -Qi

#6Messageil y a 2 mois

oops :rendre:
ba oui si rien dans la liste des orphelins, en fait nous faisons un pacman -Qi | awk et nous avons donc tous les paquets installés :rigole:
reste à trouver la parade :saispas:

- pacman -Qi $(pacman -Qdtq || echo "vide") pas top top car l'erreur est fausse mais au moins il ne retourne rien
- ou sinon plus propre tester à la ligne avant [[ "$(pacman -Qdt|wc -l)" <1 ]] && exit 0

EDIT: merci @Smurf , corrigé

awk avec pacman -Qi

#7Messageil y a 2 mois

On peut aussi récupérer des infos sans le bug avec un simple grep :
pacman -Qdti|grep "Nom\|Descr"

awk avec pacman -Qi

#8Messageil y a 2 mois

Smurf a écrit :
il y a 2 mois
On peut aussi récupérer des infos sans le bug avec un simple grep :
pacman -Qdti|grep "Nom\|Descr"
En effet, pas de retour si pas d'orphelins :merci:

Répondre