Le 2014-07-23 14:29, Steve Nadeau a écrit :
avec votre commande SED, ça ne donne pas non plus les résultats
escomptés, mais j'y ai découvert des astuces que j'ai pris en note
pour les mettre en pratique.

voici comme exemple l'extrait de l'historique de l'installation de
firefox:i386 et ce que je désire obtenir comme résultat.

Start-Date: 2014-07-21  16:23:56
Commandline: apt-get install firefox:i386
Install: libstartup-notification0:i386 (0.12-3ubuntu1, automatic),
libice6:i386 (1.0.8-2, automatic), libsm6:i386 (1.2.1-2, automatic),
firefox:i386 (30.0+build1-0ubuntu0.14.04.3), libdbusmenu-gtk4:i386
(12.10.3+14.04.20140612-0ubuntu1, automatic), libuuid1:i386
(2.20.1-5.1ubuntu20.1, automatic), libxt6:i386 (1.1.4-1, automatic),
libdbusmenu-glib4:i386 (12.10.3+14.04.20140612-0ubuntu1, automatic),
libxcb-util0:i386 (0.3.8-2ubuntu1, automatic)
Upgrade: gir1.2-dbusmenu-glib-0.4:amd64
(12.10.3+14.04.20140319-0ubuntu1, 12.10.3+14.04.20140612-0ubuntu1),
libdbusmenu-gtk4:amd64 (12.10.3+14.04.20140319-0ubuntu1,
12.10.3+14.04.20140612-0ubuntu1), libuuid1:amd64 (2.20.1-5.1ubuntu20,
2.20.1-5.1ubuntu20.1), libdbusmenu-glib4:amd64
(12.10.3+14.04.20140319-0ubuntu1, 12.10.3+14.04.20140612-0ubuntu1)
Remove: xul-ext-webaccounts:amd64 (0.5-0ubuntu2), firefox:amd64
(28.0+build2-0ubuntu2), xul-ext-unity:amd64
(3.0.0+14.04.20140416-0ubuntu1)
End-Date: 2014-07-21  16:24:13



le résultat souhaité:

libstartup-notification0:i386 libice6:i386 libsm6:i386 firefox:i386
libdbusmenu-gtk4:i386 libuuid1:i386 libxt6:i386 libdbusmenu-glib4:i386
libxcb-util0:i386

Voici comment je raisonnerais pour résoudre ce problème :
- les blocs de données à traiter sont repérés par un début "^Start-Date: " et une fin "^End-Date: " ; - la reconnaissance du bloc de données qui nous intéresse peut se faire sur une ligne "^Commandline: " contenant " install " et le nom du paquet recherché ; - l'extraction des données qui nous intéressent peut se faire depuis une ligne "^Install: " en supprimant les versions "(.*)" et les séparateurs ",".

Donc ici j'utiliserais une commande de ce genre :

awk -v p="firefox:i386" 'BEGIN {ok=0} /^Start-Date: /{ok=1} /^End-Date: /{ok=0} /^Commandline:.* install /{if(ok==1 && match($0,p)){ok=2}} /^Install: /{if(ok==2){l=substr($0,index($0,":")+2); gsub(" \\([^)]+\\),?","",l); print l; exit} }' /var/log/apt/history.log

J'imagine que quelques explications s'imposent :
- on fournit le nom du paquet à rechercher comme variable 'p' ;
- on commence au niveau 0 (rien trouvé) ;
- on passe au niveau 1 quand on trouve un bloc Start-Date/End-Date ;
- on passe au niveau 2 quand on trouve une commande d'installation contenant le nom de paquet fournit dans 'p' ; - quand on arrive sur une ligne "^Install: " au niveau 2, on récupère (dans 'l') juste la partie après le ':', on y supprime la mention des versions (gsub), puis on affiche le résultat et on s'arrête (exit).

J.C.

--
Jean Christophe ANDRÉ  —  Coordonnateur des infrastructures techniques
Agence universitaire de la Francophonie (AUF)  —   http://www.auf.org/
✉ : AUF | 3034, boul Édouard-Montpetit | Montréal QC  H3T 1J7 | CANADA
℡ : +1 514 343 6630 #1568  ✦  ℻ : +1 514 343 2107
⎧Note personnelle: merci d'éviter de m'envoyer des fichiers Microsoft⎫
⎩Office, cf http://www.gnu.org/philosophy/no-word-attachments        ⎭


--
Ubuntu-quebec mailing list
Ubuntu-quebec@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-quebec

Répondre à