edlopez

ca marche

Sep 19th, 2011
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 2.85 KB | None | 0 0
  1. #!/bin/awk
  2. # awk -f ./order-data.awk ./input-data.csv
  3.  
  4. # B le moment (hh:mm:ss) d'apparition et T le type ("State start","State stop" ou "Point").
  5.  
  6. # la table que j'essaie de faire actuellement devrait contenir des couples d'évènements X, Y (ou leur identifiant). le critère d'appartenance à cette table est le suivant :
  7. # si ((B de X - B de Y)<2secondes et > 0) et X différent de Y et T de X appartient à {"State start","Point"}
  8. # alors on crée l'élément dans la table qui contient l'identifiant de X puis l'identifiant de Y.
  9.  
  10. # on ne doit pas passer à la row start time suivante tant que l'on est pas tombé sur une row suivantes qui a lieu + de 2sec après
  11. # il faut stocker TOUS les couples de row qui sont séparées par moins de 2sec
  12.  
  13. # data structure:
  14. # $1 = "Date_dmy" = B
  15. # $2 = "Time_Absolute_hms"
  16. # $3 = "Time_Absolute_ms"
  17. # $4 = "Time_Relative_hms"
  18. # $5 = "Time_Relative_ms"
  19. # $6 = "Time_Relative_s"
  20. # $7 = "Duration_s"
  21. # $8 = "Observation"
  22. # $9 = "Event_Log"
  23. # $10 = "Behavior"
  24. # $11 = "Modifier_1"
  25. # $12 = "Modifier_2"
  26. # $13 = "Modifier_3"
  27. # $14 = "Event_Type" = ("State start","State stop" ou "Point").
  28. # $15 = "Comment"
  29. # $16 = "IV_Age"
  30. # $17 = "IV_Lecture"
  31. # $18 = "IV_Prénom"
  32. #
  33.  
  34. BEGIN{
  35.   ROWS_TO_SKIP = 1; # how many row to skip (if there is header)
  36.   TIME_THRESHOLD = 2000; # 2 seconds
  37. #  inputData = "données-vrac.csv";
  38.   inputData = "./input-data.csv";
  39.   outputFile = "output-data.csv"
  40.   FS=";"
  41.   previousRowID = 1; # row position
  42. #   previousRow = ''; # store current row for comparison
  43.   previousRowTimeStamp = 0;
  44.  
  45. }
  46.  
  47. {
  48.   rowTimeStamp[NR] = timeToMillisecond($4, $5);
  49. #  start();
  50. }
  51.  
  52.  
  53. function timeToSecond(hhmmss)
  54. {# convert time to second
  55.   split(hhmmss, t, /:0*/)
  56.  
  57.   return (t[1]*3600) + (t[2]*60) + t[3]
  58. }
  59.  
  60. function timeToMillisecond(hhmmss, ms)
  61. {# convert time to second
  62.   milli = 1000;
  63.   split(hhmmss, t, /:0*/);
  64.  
  65.   return (t[1]*3600*milli) + (t[2]*60*milli) + t[3]*milli +ms;
  66. }
  67.  
  68.  
  69. function secondToTime(sec, h, m, s)
  70. {# convert second to time
  71.   s = sec % 60;
  72.   sec = int(sec/60);
  73.   m = sec % 60;
  74.   sec = int(sec/60);
  75.   h = sec;
  76.  
  77.   return sprintf("%02d:%02d:%02d", h, m, s);
  78. }
  79.  
  80. # function millisecondToTime(millisec)
  81. # {# convert second to time
  82. #   s = millisec % 60;
  83. #   s = millisec % 60;
  84. #   sec = int(sec/60);
  85. #   m = sec % 60;
  86. #   sec = int(sec/60);
  87. #   h = sec;
  88. #  
  89. #   return sprintf("%02d:%02d:%02d:%03d", h, m, s, ms);
  90. # }
  91.  
  92. END {
  93.   for (anchor=1; anchor<=NR; anchor++)
  94.   {
  95.     cur = rowTimeStamp[anchor];
  96.     for (forward=anchor+1; forward<=NR; forward++)
  97.     {
  98.       if (rowTimeStamp[forward] <= (cur+TIME_THRESHOLD))
  99.       {
  100.         printf("%d,%d [%d -> %d]\n", anchor, forward, rowTimeStamp[anchor], rowTimeStamp[forward], rowTimeStamp[forward]-rowTimeStamp[anchor]);
  101.       } else
  102.       {
  103.         break;
  104.       }
  105.     }
  106.   }
  107.   printf("\n");
  108. }
Advertisement
Add Comment
Please, Sign In to add comment