bash, lire ligne par ligne

2012-10-16 | #bash #line #read

Pour un fichier : $ while read line ; do echo $line; done < /etc/shells # /etc/shells: valid login shells /bin/csh /bin/sh /usr/bin/es /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /usr/bin/esh /bin/dash /bin/bash /bin/rbash /usr/bin/screen Et encore mieux, sur la sortie d’une commande :) $ while read line ; do echo $line; done < <(head -n 3 /etc/shells) # /etc/shells: valid login shells /bin/csh /bin/sh

Continuer la lecture 


awk, un exemple pour bien débuter et comprendre...

2012-10-15 | #awk #base #for

$ cat file.txt Firstname;Lastname John;Doe Jane;Doe Paul;Smith #end of file with a ; character $ for b in b b1 b2; do awk -F ';' -v base=$b -v fmt='use %s; insert into Users values ("%s", "%s");\n' 'NR>=2 && /;/ && !/^#/ {printf fmt, base, $1, $2}' file.txt done use b; insert into Users values ("John", "Doe"); use b; insert into Users values ("Jane", "Doe"); use b; insert into Users values ("Paul", "Smith"); use b1; insert into Users values ("John", "Doe"); use b1; insert into Users values ("Jane", "Doe"); use b1; insert into Users values ("Paul", "Smith"); use b2; insert into Users values ("John", "Doe"); use b2; insert into Users values ("Jane", "Doe"); use b2; insert into Users values ("Paul", "Smith"); awk n’est pas si compliqué que ça lorsque l’on comprend la philosophie…

Continuer la lecture 


python, lire et écrire des fichiers xls

2012-10-15 | #excel #python

Si l’on a des fichiers Excel que l’on souhaite lire ou écrire, on peut utiliser les paquets xlrd (reader) et xlwt (writer). Voici un petit exemple de ce que l’on peut faire : #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import xlrd import codecs import os files = [u"FormatBDD_XXX_backend.xls", u"FormatBDD_XXXdata.xls", u"FormatBDD_XXX_desc.xls", u"FormatBDD_XXX_dm.xls", u"FormatBDD_dimension.xls"] for f in files: book = xlrd.open_workbook(f) for sheet_name in book.sheet_names(): base = f.replace('FormatBDD_', '') base = base.

Continuer la lecture 


bash, savoir si stdout fait référence à un terminal

2012-10-12 | #colordiff #diff

Pour savoir si la sortie standard pointe sur un terminal, on peut utiliser l’opérateur “-t” en bash. diffutil=diff if [ -t 1 ]; then if which colordiff > /dev/null; then diffutil=colordiff fi fi Dans le cas présenté, on utilisera colordiff pour le rendu sinon diff. En effet, un pipe avec less (sans l’option -R ou la variable LESS définie à -R) afficherait les caractères d’échappement servant à la colorisation des lignes

Continuer la lecture 


sql, gérer les conflits lors des inserts

2012-10-12 | #if #insert into #mysql #on duplicate key #select #tts #values

Lors d’un insert, si la clé primaire existe déjà, il est possible de faire un traitement comme dans l’exemple ci-dessous. insert into enveloppesTTS (enveloppe, tts) select enveloppe, '' as tts from enveloppes on duplicate key update enveloppesTTS.tts=if(enveloppesTTS.tts<>'',enveloppesTTS.tts,values(tts)); Ici, on tente de peupler la table enveloppesTTS avec des valeurs. Si l’entrée n’existe pas, on la crée. Sinon on met à jour un champ de cette table uniquement si sa valeur n’est pas déjà renseigné.

Continuer la lecture 


bash, voir autour des occurences avec grep...

2012-10-12 | #grep

Voici comment on peut voir les lignes proches des occurences matchées par grep $ grep -C 5 Msg_Motif_Reit etc/centralisation.yml ref_db: desc ref_table: motif select_column: motifId where_column: motifName - name: Msg_Motif_Reit comment: "nom de l'enveloppe associée au micro motif utilisé pour la reiteration" value_regex: '[\w/]+' - name: reit_ACC comment: "détermine si le client est en reiteration" Avec l’option : A : affiche les lignes après l’occurence trouvée (after) B : affiche les lignes avant l’occurence trouvée (before) C : affiche les lignes avant et après l’occurence trouvée

Continuer la lecture 


python, faire en sorte que stdin/stdout lisent et écrivent en binaire

2012-10-10 | #binary #fileno #os #python

J’ai écrit un petit programme qui s’inspire de cut en python. La lecture et l’écriture pouvant se faire sur l’entrée/sortie standard (sources ucut), j’avais des problèmes de “‘ascii’ codec can’t decode byte”… Pour y remédier, j’ai “transformé” les flux standard (mode texte) en flux binaires de la manière suivante : import sys import os sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0) sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)

Continuer la lecture 


bash, vérifier si une variable matche une regexp

2012-10-10 | #bash #re #regexp

On peut facilement vérifier si une donnée contenue dans une variable est au bon format. Dans l’exemple ci-dessous, on vérifie si le numéro de version fourni est correct. if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Le numéro de version donné '$version' n'a pas le bon format." exit 1 fi Dans celui-ci si la valeur contient localhost ou itg [[ $environnement =~ localhost|itg ]] && echo 1 Attention, la regexp n’est pas entre quote ni double-quote.

Continuer la lecture 