Extraction données via script

Extraction données via script - Shell/Batch - Programmation

Marsh Posté le 29-04-2014 à 17:50:45    

Bonjour,
 
Le but de mon script et de créer une liste des utilisateurs dont la dernière connexion remonte à au moins 3 mois. Comme je débute en script sous Unix j'y vais petit à petit  :D  
 

Code :
  1. #!/bin/sh
  2. currentDate=$(date +%s)
  3. cat users.txt|
  4. while read G;
  5.         date=$(cut -d"," -f5)
  6.         do echo "$date"
  7. done


 
Le problème que j'ai avec ce minuscule bout de code c'est que lorsque je l'exécute il me sort bien la date mais aussi une flopée de ligne vide, j'ai bien regardé mon fichier et je n'ai aucune ligne vide sur lesquelles le script pourrait boucler.
 
Une idée du problème ?
 
Merci,  :jap:

Reply

Marsh Posté le 29-04-2014 à 17:50:45   

Reply

Marsh Posté le 29-04-2014 à 19:51:22    

:hello: !
Es-tu sûr que ton début de code est fonctionnel ? :??: Quand je l'exécute, il tombe en boucle infini [:er dehy:3]
Pour commencer, j'aurais vu un truc plutôt dans ce genre :

Code :
  1. #!/bin/sh
  2. currentDate=$(date +%s)
  3. cat users.txt|while read G
  4. do
  5.   date=$(cut -d"," -f5)
  6.   echo "$date"
  7. done
 

Edit : Voici un code plus propre :

Code :
  1. #!/bin/sh
  2. currentDate=$(date +%s)
  3. cat users.txt|while read G
  4. do
  5.   date=$(echo $G|cut -d"," -f5)
  6.   echo "$date"
  7. done


Message édité par Soileh le 29-04-2014 à 19:58:39

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 13-05-2014 à 15:18:51    

Salut,
 
Effectivement il y avait un petit problème avec mon code, boucle infinie  :D  
 
Je l'ai modifié afin qu'il me convertisse ma date en timestamp (ce que j'ai réussi à faire)
 

Code :
  1. #!/bin/sh
  2. currentDate=$(date +%s)
  3. cat users.txt|while read G
  4. do
  5.   dateToConvert=$(echo $G|cut -d"," -f5)
  6.   timestampDate=$(date -d "$dateToConvert" "+%s" )
  7.   echo $timestampDate
  8. done


 
Mon fichier (users.txt) sur lequel je boucle se présente de cette façon
 

john.doe@jetapefort.com,/XX_Divisions/AAA,True,ADMIN,2013-04-05 14:44:01


 
L'idée serait de remplacer pour chaque ligne la date par son timestamp correspondant.  
Faut obligatoirement que je me tape des regex avec Sed pour remplacer ?
 
Merci  :jap:

Reply

Marsh Posté le 13-05-2014 à 16:40:41    

Sed -i est mon ami  :D

Reply

Marsh Posté le 11-06-2014 à 19:52:25    

Je reviens vers vous pour une petite question,
 

Code :
  1. cat test.txt |while read L;
  2. do
  3.         date=$(echo $L|cut -d"," -f8)
  4.         res=$(($currentDate - $date))
  5.         if["$res" -gt 0]
  6.         then
  7.                 echo "to suspend"
  8.         else
  9.                 echo "nothing"
  10.         fi
  11.         #sed -i 's/'$date'/'$res'/g' test.txt
  12. done


 
J'obtiens le message suivant : script.sh: 19: script.sh: Syntax error: "then" unexpected (expecting "done" )
 
La ligne 19 correspond à la ligne 7 ici.
 
Où est-ce que je me plante  :??:  

Reply

Marsh Posté le 11-06-2014 à 21:17:28    


C'est peut-être à cause de l'absence des espaces dans le if :??: ; il faudrait modifier la ligne de la manière suivante :

Code :
  1. if [ "$res" -gt 0 ]


:jap:


Message édité par Soileh le 11-06-2014 à 21:21:04

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 12-06-2014 à 10:09:09    

ça me parait étrange mais je teste ça cet aprem  :jap:

Reply

Marsh Posté le 12-06-2014 à 13:01:46    

Exact ça venait bien de ça, je pensais pas du tout que l'absence d'un espace pouvait faire planter le script.
 
Merci encore  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed