Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1217 connectés 

 


Dernière réponse
Sujet : extraire des lignes d'un fichier de log
philou_a7 ca peut aussi se faire avec awk ;) c'est a ca que je pensais
 
dans le principe, tu poses un flag quand tu rencontres la ligne "building file list ... done", et si ce flag est validé, tu ne garde que les lignes qui ne commencent pas par delete et ne finissent pas par / ;)
 

Code :
  1. gawk 'BEGIN {files = 0}
  2. /^building file.*/ {files = 1}
  3. /.*heap statistics.*/ {files = 0}
  4. ! ( /deleting .*/ || /.*\\$/ ) { if files==1 then { print $0 } }'


 
bon, le code doit etre foireux, c'est faitr de tete, mais ca doit pouvoir se faire comme ça ;)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
philou_a7 ca peut aussi se faire avec awk ;) c'est a ca que je pensais
 
dans le principe, tu poses un flag quand tu rencontres la ligne "building file list ... done", et si ce flag est validé, tu ne garde que les lignes qui ne commencent pas par delete et ne finissent pas par / ;)
 

Code :
  1. gawk 'BEGIN {files = 0}
  2. /^building file.*/ {files = 1}
  3. /.*heap statistics.*/ {files = 0}
  4. ! ( /deleting .*/ || /.*\\$/ ) { if files==1 then { print $0 } }'


 
bon, le code doit etre foireux, c'est faitr de tete, mais ca doit pouvoir se faire comme ça ;)

warp hum...........parfait !
j'aurais voulu le faire en script shell,
mais je crois que je vais garder ça
arsunik

Code :
  1. perl -ne '$p=0 if (/^rsync\[/);print if ($p==1 && !/^deleting/ && !/\/$/); $p=1 if (/building file list ... done/);' toto.log


warp .......je vais regarder ça
void_ppc T'as essayé de faire quelque chose avec --log-format=FORMAT ?
 

Citation :

This allows you to specify exactly what the rsync client logs to
              stdout on a per-file basis. The log format  is  specified  using
              the  same  format  conventions  as  the  log  format  option  in
              rsyncd.conf


 
 
Voilà le sus-dit format :
 

Citation :

log format
              The  "log  format"  option allows you to specify the format used
              for logging file transfers when transfer logging is enabled. The
              format  is  a  text  string containing embedded single character
              escape sequences prefixed with a percent (%) character.
 
              The prefixes that are understood are:
 
       o      %h for the remote host name
 
       o      %a for the remote IP address
 
       o      %l for the length of the file in bytes
 
       o      %p for the process id of this rsync session
 
       o      %o for the operation, which is either "send" or "recv"
 
       o      %f for the filename
 
       o      %P for the module path
 
       o      %m for the module name
 
       o      %t for the current date time
 
       o      %u for the authenticated username (or the null string)
 
       o      %b for the number of bytes actually transferred
 
       o      %c when sending files this gives the number  of  checksum  bytes
              received for this file
 
              The  default log format is "%o %h [%a] %m (%u) %f %l", and a "%t
              [%p] " is always added to the  beginning  when  using  the  "log
              file" option.
 
              A  perl  script  called  rsyncstats  to summarize this format is
              included in the rsync source code distribution.

warp En gros, si j'arrive à lister les lignes comprises entre les 2 délimiteurs, je devrais m'en sortir avec grep,
mais je n'arrive pas à fournir la liste de ces lignes à grep.
warp En fait les fichiers apparaissent systématiquement après :

Code :
  1. building file list ... done


et se terminent avec:

Code :
  1. rsync[11057] (sender) heap statistics:


 
Mais dans cette liste, il y a des noms de fichiers effacés
(qui commentcent par : deleting)
et des noms de répertoires (qui se terminent par '/')
.......je ne veux pas ces 2-ci, seulement les fichiers mis à jour.
 
J'essaye avec awk, grep ......... mais pas moyen.

philou_a7 tu saurais delimiter la zone ou les fichiers se trouvent ?
 
est ce qu'il y a un motif qui peut apparaitre pour dire "là je vais avoir mes fichiers" et "là y en a plus" (il y a des "....." dans ton exemple, sont ils toujours là ?)
warp Bonjour,
 
j'ai un fichier de log de rsync.
Il faut que je récupère les noms de fichiers transférés.
 
Pour ce faire, je dois prendre, entre 2 lignes,
les noms de fichiers ne se terminant pas par un '/'
.......mais je n'y arrive pas.
Pourtant je pense que ce n'est pas trop compliqué.
 
A une certaine ligne (pas forcément fixe) commence un liste de répertoires et de noms de fichiers.
Cette liste se termine à une ligne qui est aussi inconnue(dépend du nombre de fichiers).
 
Ex:

Code :
  1. Wed Nov 12 00:00:00 CET 2003
  2. PING intranet (192.168.50.108) from 192.168.100.150 : 1(29) bytes of data.
  3. 9 bytes from intranet (192.168.50.108): icmp_seq=1 ttl=63
  4. --- intranet ping statistics ---
  5. 1 packets transmitted, 1 received, 0% loss, time 0ms
  6. building file list ... done
  7. deleting 01_Nomenclatures/V520489097_ArconST_Subrack_2448_120_3000_wiNema/nomenclature_V520489097.htm
  8. deleting 01_Nomenclatures/V520489096_ArconST_Subrack_48_120_300_wiNema/nomenclature_V520489096.htm
  9. deleting 01_Nomenclatures/V511102254_ArconSTI_1250_110_230/nomenclature_V511102254.htm
  10. deleting 01_Nomenclatures/V510489111_SUBRACK_HDS_50A-120V_2U/nomenclature_V510489111.htm
  11. deleting 01_Nomenclatures/V510489110_SUBRACK_HDS_30A-230V_1U/nomenclature_V510489110.htm
  12. .......
  13. ./
  14. 01_Nomenclatures/
  15. 01_Nomenclatures/2399049523_ArconST300230_SubRack/Test_UL.xls
  16. 01_Nomenclatures/3620000000_GROUP_COMPONENT_STI_RDI_1_48/
  17. 01_Nomenclatures/3620000001_GROUP_COMPONENT_RDI_3_48/
  18. 01_Nomenclatures/3620000002_MainBoard_STI_300_48_TCG/archive_res510k.doc
  19. .....
  20. rsync[11057] (sender) heap statistics:
  21.   arena:         311704   (bytes from sbrk)
  22.   ordblks:           10   (chunks not in use)
  23.   smblks:             0
  24.   hblks:              0   (chunks from mmap)
  25.   hblkhd:             0   (bytes from mmap)
  26.   usmblks:            0 
  27.   fsmblks:            0
  28.   uordblks:      286952   (bytes used)
  29.   fordblks:       24752   (bytes free)
  30.   keepcost:        9632   (bytes in releasable chunk)
  31. Number of files: 1911
  32. Number of files transferred: 0
  33. Total file size: 297544312 bytes
  34. Total transferred file size: 0 bytes
  35. Literal data: 0 bytes
  36. Matched data: 0 bytes
  37. File list size: 71980
  38. Total bytes written: 71996
  39. Total bytes read: 20


 
En l'occurence je veux récupérer :

Code :
  1. 01_Nomenclatures/2399049523_ArconST300230_SubRack/Test_UL.xls
  2. 01_Nomenclatures/3620000002_MainBoard_STI_300_48_TCG/archive_res510k.doc


 
J'aimerais faire ceci avec un script shell, pour la facilité de mise à jour.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR