Articles

Affichage des articles associés au libellé oneliner

Comment ajouter des sauts (retour) à la ligne dans un énorme xml d'une seule ligne !

J'avais un grand fichier récupéré via un curl : curl -#v -o /tmp/output.xml "http://www.myserver.ch/extraction_file.php?mode=complex&typef=xml" le problème c'est que ce fichier "output.xml" était un gros xml valide d'une seule  ligne... un "wc -l /tmp/output.xml"  me retourne bien 1 ! Or la plupart des éditeurs n'aiment pas trop ouvrir ce genre de fichier d'une seule "énorme" ligne, voire même ils plantent lamentablement. La solution est d'utiliser un bon vieux oneliner en perl pour rajouter un saut de ligne après un tag fermant : perl -i -pe 's/<\/Adr>/<\/Adr>\n/g' /tmp/output.xml Et voilà , maintenant le fichier contient autant de ligne qu'il y a de tags fermants . Et du coup il est beaucoup plus facile à utiliser dans votre éditeur favori !

Comment renommer 350 fichiers d'un coup d'un seul sous Linux-bash

Je me suis retrouvé dans la situation ou dans un répertoire j'avais 350 fichiers du style dtmgrid122413_1m.asc.gz qu'il fallai que je renomme en MNT_1224-13_1m.asc.gz grâce aux pipe et à sed c'est possible en une seule commande: for i in dtm*; do (mv $i `echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'`); done on retrouve une boucle for qui parcoure chaque fichier dans le répertoire courant et le stocke dans la variable i. Puis pour chaque fichier trouver on va faire un mv pour renommer l'ancien nom de fichier se trouvant en $i en quelquechose qui se trouve etre le résultat de l'expression: `echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'` notez bien que l'expression est entre backquotes c'est grâce à cela que l'on reçoit la valeur finale de l'éxécution de cette suite de commande et non pas une simple chaine de caractères équivalent à notre commande... en gros c'est grâce à une substitution sed " s/avant/apres/ " qui ...

Extraire tous les textes de liens dans un tag

Soit une page html contenant une liste de fichiers du style de ce que l'on trouve dans une page d'index générée par le serveur Apache. Je veux en extraire tous les noms de fichiers. Donc en résumé j'ai quelque chose du style : <img src="compressed.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zsh-lovers_0.5.orig.tar.gz">zsh-lovers_0.5.orig.tar.gz</a> 01-Aug-2006 18:05 487K <img src="unknown.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zsnes151src.tar.bz2">zsnes151src.tar.bz2</a> 25-Jan-2007 02:22 1.0M <img src="compressed.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zssh-1.5a.tgz">zssh-1.5a.tgz</a> 2...

Comment extraire une "zone" de texte

Il arrive qu'on aie besoin de sortir tout ce qu'il y a en tre blabla et blabli et bien en perl on peut utiliser lkes ranges avec l'opérateur '..'. Ainsi avec perl -ne 'print if /<title.*>/../<\/title>;/' index.html On obtient uniquement le titre de la page Bien sur rien n'empêche d'utiliser l'excellent LWP pour récupérer la page perl -MLWP::Simple -e 'getprint q(http://lapt.blogspot.com)'

Compter le nombre de codes HTTP dans des fichiers logs avec awk

Image
Aujourd'hui je devais sortir rapidement la liste des différents codes HTTP de tous les fichiers logs IIS. Comme expliqué dans mon post précédent j'ai un fichier par jour et environ 16 GB de fichiers logs sur une année... Dans un fichier log pour un serveur web il y a en général un code indiquant le status de l'opération réalisée. Ainsi dans IIS on peut utiliser un format de log W3C qui affichera la colonne sc-status pour le Http status code ainsi que la colonne sc-substatus. Mon but est de parcourir tous les fichiers logs et de calculer le nombre de fois que l'on trouve chacun de ces status code. On pourrait le faire avec du perl, mais je préfère aujourd'hui essayer awk présent sur toutes les bonnes distros Linux en standard. awk ou le plus répandu et moderne gawk est un outil formidable pour traiter très rapidement des gros volumes de données au format texte. Commençons par un exemple simple : je veux trouver toutes les lignes du log ou le code d'état HTTP es...

Analyse de fichiers Log en perl

Quand il faut analyser de grandes quantité de données sous format texte tel que des fichiers logs, Perl est d'une aide inappréciable. Voici un joli "perl oneliner" qui va calculer le nombre de hits par user login dans un log IIS perl -ne 'unless (/^#.*$/) {@e=split(/ /,$_); $Login{uc($e[8])}++;} END{foreach $key (sort keys %Login){printf(qq(%-25s %i\n),$key,$Login{$key}); } }' 2007/ex070106.log 2007/ex070107.log |sort -k 2nr >DistinctsLogins200701.txt Analysons un peu cette ligne de commande: perl -ne : on lance perl avec les option -n qui rajoute une boucle while ( ) {...} implicite et l'option -e qui permet justement d'exécuter une commande cf doc perl en ligne 'unless (/^#.*$/) { : viens maintenant le début du programme perl, en l'occurrence on dit que tant qu'on est pas dans une ligne de commentaire on va faire quelque chose se trouvant après l'accolade ouvrante. En effet dans les fichiers logs une ligne commentaire commence p...