msgbartop
msgbarbottom

01 mar 12 Find

Lister dans le répertoire toto/ tous les fichiers crées il y a -40 minutes

find toto/ -type f -mmin -40 -exec ls -rtla {} \;

Une fois qu’on aura vérifié que ça donne le bon résultat, on pourra effacer les fichiers en question remplacer le

-exec ls {}

par

-exec rm {}

Tags:

01 fév 12 Divers SHELL

Updated: 23 mai 2012

dd/mm/yy

Comparer le contenu de 2 répertoires (dir1 & did 2). On peut utiliser rsync mais en fait le plus simple est d’utiliser diff:

diff -rq dir1 dir2
 
-r  --recursive  Recursively compare any subdirectories found
-q  --brief  Output only whether files differ

Faire un test de modulo (tous les 1000)

if [ $(($i% 1000)) -eq 0 ]
then
echo "$i)"
fi

Tags:

09 déc 08 awk et LC_NUMERIC

Je me suis bien tiré les cheveux avec le awk de mon Mac Intel (sous Leopard):

des opérations mathématiques simples sur des colonnes d’un fichier me donnaient

des résultats complètement aberrants. 

De même je me suis aperçu que:

echo "1.23456" |awk '{print -$1}''
-1

et que

echo "1,23456" |awk '{print -$1}'
-1,23456

 

En cherchant pas mal sur le web j’ai trouvé que la faute venait de la variable LC_NUMERIC.

locale | grep LC_NUMERIC
LC_NUMERIC="fr_FR.UTF-8"

 

En changeant cette variable par export LC_NUMERIC=C  les résultats étaient complètement différents:

 

echo "1.23456" |awk '{print -$1}'
-1.23456

et 

echo "1,23456" |awk '{print -$1}'
-1

Ce qui a résolu mes problèmes d’opérations mathématiques  (j’ai donc exporter LC_NUMERIC=C dans mon .profile).

 

PS: Cela dit en passant la réponse  -1 donnée,  faudrait m’expliquer …

Tags: , ,

15 oct 08 sed

Remplacer « slash » par « antislash slash » (« / » par « \/ »):

echo $PWD | sed -e "s#/#\\\\\/#g" (en ligne de commande sed -e "s#/#\\/#g" est suffisant)

Pour supprimer les espaces en début de ligne avec sed

sed -e "s/^ *//g"

Pour remplacer abs( par fabs( dans tous les fichiers .cc

for i in *.cc; do sed 's/ abs(/  fabs(/g' $i > $i.tmp ;rm $i; mv $i.tmp $i ; done

Pour s’affranchir de la création des fichiers $i.tmp utiliser tee (merci TjB)

sed 's/ abs(/  fabs(/g'  $i | tee > $i

Récupérer une chaîne de caractères entre () .
Cette chaîne peut avoir aussi des espaces (merci beubeu)

echo "qsdjmlsjkld(00 00)" | sed 's/.*(\(.*\)).*/\1/g'

Changer dans src tout les fichiers commençant par Eli en fichiers commençant par Capi

for i in `ls src/*`;do mv $i `echo $i | sed "s/Eli/Capi/g"` ;done

Tags: ,

15 oct 08 awk

Updated: 22 mars 2013

Sommer tous les nombres d’une colonne d’un fichier

awk{sum +=$1} END {print sum}’ fichier

fait la somme en valeur absolue

awk '{if ($1 < 0) $1 = -$1} {sum +=$1} END {print sum}' fichier

Sommer les 35000 premiers nombres d’une colonne d’un fichier

awk ' NR < 35000 {sum += $1} END {print sum} ' fichier

Nombre de lignes qui possède la 1ere colonne < 325

awk '$1&lt;325. {print $1}' fichier | wc -l

Sommer les nombres d’une colonne si les valeurs < 325

awk '$1&lt;325 {sum +=$1} END {print sum}' fichier

Imprime les lignes où le mot sampler apparaît

awk '/sampler/{print$0}' fichier

Imprime les lignes où le mot sampler n’apparaît pas

awk '!/sampler/{print$0}' fichier

Compte le nombre de colonne de fichier

awk 'END {print NF}' fichier

Le minimum de la première colonne du fichier test

awk 'min=="" || $1 < min {min=$1} END{ print min}'test

Le maximum de la première colonne du fichier test et à quelle ligne il se situe

awk 'max=="" || $1 > max {max=$1;line=NR} END{ print max,line}'  test

Récupérer une ligne particulière (ici la 17ème ligne)  du fichier TOTO

cat TOTO | awk 'NR == 17 {print;}'

Imprimer toutes les colonnes d’un fichier sauf la dernière

awk '{$NF=""; print $0}' TOTO.txt

et

awk '{$(NF-1)=""; print $0}' ff300_1M.txt

pour supprimer l’avant dernière colonne
Ecrire sur une même ligne (au lieu de passer à la ligne pour chaque valeur) le résultat d’un print d’une colonne

awk '{ printf("%s,",$2) } END {printf("\n")}' toto.txt

Tags: , , ,

Switch to our mobile site