bash, récupérer la n-ième ligne ou les lignes x à y d'un fichier

2012-10-17 | #awk #sed

On peut utiliser awk avec NR (numéro de ligne tout fichier confondus) ou FNR (numéro de ligne du fichier) : ### afficher la 3e ligne $ awk 'NR==3 { print; exit; }' /etc/passwd bin:x:2:2:bin:/bin:/bin/sh ### afficher les lignes 3 à 6 $ awk '3<=NR && NR<=6 { print; }' /etc/passwd bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh Ou bien avec sed : $ cat /etc/passwd | sed '3!d' bin:x:2:2:bin:/bin:/usr/sbin/nologin $ cat /etc/passwd | sed '3,6!

Continuer la lecture 


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 