jeudi 24 mai 2012

bash, sommer une colonne....

Comment sommer des valeurs provenant d'un fichier ou de la sortie standard. Voici plusieurs solutions...


A la awk :
printf "1\n2\n3\n" | awk '{s+=$1} END {print s}'

A la tr :
printf "1\n2\n3\n"| tr '\n' '+' | sed -e 's/+$/\n/' | bc

A la paste :
printf "1\n2\n3\n" | paste -sd+ | bc

Moi je choisis la troisième solution. Elle est plus courte, simple et efficace !!

bash, presse-papier

Il est possible de copier un fichier ou la sortie standard dans le presse papier... Il suffit d'utiliser la commande
xsel
Exemple :

$ cat /etc/fstab | xsel -b

La commande xclip un peu similaire permet la même chose...

$ sudo apt-get install xclip# Downloads and installs xclip
$ xclip -sel clip < ~/.ssh/id_rsa.pub

python, marre des accents en java : remplacez les par de l'unicode !


$ cat tounicode.py
#!/usr/bin/python

import re
import sys

s = sys.argv[1].decode('utf8')

print re.sub('\\\\x', '\\u00', re.sub('\'$', '', re.sub('^u\'', '', repr(s))))

$ python tounicode.py "salut beauté"
salut beaut\u00e9

mardi 15 mai 2012

svn, revert d'un commit

Un mauvais commit sur un fichier ? Pas de problème, il peut être inversé :)
svn merge -c -[bad_revision] [repository_url]
Attention au - devant la mauvaise révision... Ne restera plus qu'à commiter l'inversion

vendredi 4 mai 2012

mysqlimport

Le fichier doit porter le nom de la table à l'extension près. Ici les options utilisées sont :
  • --delete pour vider la table avant l'import
  • --fields-terminated-by pour le séparateur entre les champs
  • --lines-terminated-by pour le caractère de fin de ligne (ici DOS/WINDOWS)

mysqlimport 
--fields-terminated-by=\; 
--lines-terminated-by="\\r\\n" 
-v 
--delete 
-utest -ptest -hlocalhost BASE TABLE.csv

python, conversion d'un fichier d'iso8859 en utf8

#!/bin/python

import sys

if len(sys.argv) != 3:
    print 'usage: python iso8859toutf8.py [infile] [outfile]'
    sys.exit(0)

with open(sys.argv[2], 'w') as fout:
    with open(sys.argv[1], 'r') as fin:
        data = fin.read().decode('iso8859')
        while data:
            fout.write(data.encode('utf8'))
            data = fin.read().decode('iso8859')