Shell - bash recherche dans un fichier texte [Résolu/Fermé]

Signaler
-
 Thesmarch -
Bonjour,



A partir d'un fichier test.txt :

Press [q] to stop, [?] for help
frame= 419 fps=0.0 q=0.0 size= 0kB time=00:00:13.98 bitrate= 0.0kbits/s dup=1 drop=0
black_start:16.5832 black_end:25.0917 black_duration:8.5085
frame= 909 fps=907 q=0.0 size= 0kB time=00:00:30.33 bitrate= 0.0kbits/s dup=1 drop=0
frame= 1282 fps=853 q=0.0 size= 0kB time=00:00:42.77 bitrate= 0.0kbits/s dup=1 drop=0
black_start:50.2168 black_end:50.9509 black_duration:0.734067
frame= 1735 fps=866 q=0.0 size= 0kB time=00:00:57.89 bitrate= 0.0kbits/s dup=1 drop=0
frame= 2184 fps=872 q=0.0 size= 0kB time=00:01:12.87 bitrate= 0.0kbits/s dup=1 drop=0
black_start:81.9819 black_end:87.4207 black_duration:5.43877
frame= 2671 fps=889 q=0.0 size= 0kB time=00:01:29.12 bitrate= 0.0kbits/s dup=1 drop=0
frame= 3088 fps=889 q=0.0 Lsize= 0kB time=00:01:43.03 bitrate= 0.0kbits/s dup=1 drop=0

video:0kB audio:0kB global headers:0kB muxing overhead -nan%
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)


Grace à un script en shell, j'aimerais obtenir un fichier texte de ce type la:

resultat.txt

N°1
black_start = 16.5832
black_end = 25.0917
black_duration:8.5085

N°2
black_start = 50.2168
black_end = 50.9509
black_duration:0.734067

N°3
black_start = 81.9819
black_end = 87.4207
black_duration:5.43877


J'ai deja regarder de la doc sur awk, sed, grep .. mais je parviens pas à obtenir quelque chose qui tiens la route.

Merci pour votre aide

2 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 960
Salut,

$ cat plop 
Press [q] to stop, [?] for help
frame= 419 fps=0.0 q=0.0 size= 0kB time=00:00:13.98 bitrate= 0.0kbits/s dup=1 drop=0
black_start:16.5832 black_end:25.0917 black_duration:8.5085
frame= 909 fps=907 q=0.0 size= 0kB time=00:00:30.33 bitrate= 0.0kbits/s dup=1 drop=0
frame= 1282 fps=853 q=0.0 size= 0kB time=00:00:42.77 bitrate= 0.0kbits/s dup=1 drop=0
black_start:50.2168 black_end:50.9509 black_duration:0.734067
frame= 1735 fps=866 q=0.0 size= 0kB time=00:00:57.89 bitrate= 0.0kbits/s dup=1 drop=0
frame= 2184 fps=872 q=0.0 size= 0kB time=00:01:12.87 bitrate= 0.0kbits/s dup=1 drop=0
black_start:81.9819 black_end:87.4207 black_duration:5.43877
frame= 2671 fps=889 q=0.0 size= 0kB time=00:01:29.12 bitrate= 0.0kbits/s dup=1 drop=0
frame= 3088 fps=889 q=0.0 Lsize= 0kB time=00:01:43.03 bitrate= 0.0kbits/s dup=1 drop=0

$ awk 'BEGIN{i=0} /black_start/ { i++; gsub(/:/," = ",$1);gsub(/:/," = ",$2); printf "%s\n%s\n%s\n%s\n\n","N°"i,$1,$2,$3}' plop 
N°1
black_start = 16.5832
black_end = 25.0917
black_duration:8.5085

N°2
black_start = 50.2168
black_end = 50.9509
black_duration:0.734067

N°3
black_start = 81.9819
black_end = 87.4207
black_duration:5.43877

;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Aaaaah magnifique merci!

j'ai juste un petit probleme, pour mon post, j'avai juste mis une partie du fichier texte, et quand je le met en entier:

ffmpeg version 0.9.1.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Mar 15 2012 15:29:50 with gcc 4.6.1
  configuration: 
  libavutil      51. 42.100 / 51. 42.100
  libavcodec     54. 10.100 / 54. 10.100
  libavformat    54.  2.100 / 54.  2.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 64.101 /  2. 64.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  7.100 /  0.  7.100
Input #0, avi, from 'prjt_multi.avi':
  Metadata:
    encoder         : Lavf53.3.0
  Duration: 00:01:43.00, start: 0.000000, bitrate: 1808 kb/s
    Stream #0:0: Video: mpeg2video (Main) (mpg2 / 0x3267706D), yuv420p, 720x480 [SAR 8:9 DAR 4:3], 104857 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn, 59.94 tbc
    Stream #0:1: Audio: mp2 (P[0][0][0] / 0x0050), 44100 Hz, 2 channels, s16, 128 kb/s
[buffer @ 0x90b60a0] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:8/9 sws_param:
[blackdetect @ 0x8ff0c40] black_min_duration:0.1 pixel_black_th:0.100000 pixel_black_th_i:37 picture_black_ratio_th:0.700000
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf54.2.100
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 720x480 [SAR 8:9 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 29.97 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video -> rawvideo)
Press [q] to stop, [?] for help
frame=  419 fps=0.0 q=0.0 size=       0kB time=00:00:13.98 bitrate=   0.0kbits/s dup=1 drop=0    
black_start:16.5832 black_end:25.0917 black_duration:8.5085
frame=  909 fps=907 q=0.0 size=       0kB time=00:00:30.33 bitrate=   0.0kbits/s dup=1 drop=0    
frame= 1282 fps=853 q=0.0 size=       0kB time=00:00:42.77 bitrate=   0.0kbits/s dup=1 drop=0    
black_start:50.2168 black_end:50.9509 black_duration:0.734067
frame= 1735 fps=866 q=0.0 size=       0kB time=00:00:57.89 bitrate=   0.0kbits/s dup=1 drop=0    
frame= 2184 fps=872 q=0.0 size=       0kB time=00:01:12.87 bitrate=   0.0kbits/s dup=1 drop=0    
black_start:81.9819 black_end:87.4207 black_duration:5.43877
frame= 2671 fps=889 q=0.0 size=       0kB time=00:01:29.12 bitrate=   0.0kbits/s dup=1 drop=0    
frame= 3088 fps=889 q=0.0 Lsize=       0kB time=00:01:43.03 bitrate=   0.0kbits/s dup=1 drop=0    

video:0kB audio:0kB global headers:0kB muxing overhead -nan%
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)


et que j'utilise : $ awk 'BEGIN{i=0} /black_start/ { i++; gsub(/:/," = ",$1);gsub(/:/," = ",$2); printf "%s\n%s\n%s\n%s\n\n","N°"i,$1,$2,$3}' output.txt

j'obtiens :

N°1
frame=
419
fps=0.0

N°2
frame=
909
fps=907

N°3
frame=
1735
fps=866


Et je comprends pas pourquoi parcequ'il n'y a pas d'autre "black_start" dans mon fichier texte complet?!

Merci encore zipe31!!
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 960
Bon ben là ça marche ;-))

Donc maintenant essaie :

sed 's/\r/\n/g' output.txt | awk 'BEGIN{i=0} /black_start/ { i++; gsub(/:/," = ",$1);gsub(/:/," = ",$2); printf "%s\n%s\n%s\n%s\n\n","N°"i,$1,$2,$3}' 
Effectivement, ça marche à la perfection!
Merci beaucoup!
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 960
Si tu mets ça dans un script, change le shebang (#!/bin/sh) et mets "#!/bin/bash" à la place. En effet, sur Ubuntu (et Debian maintenant), "/bin/sh" est un lien symbolique vers "/bin/dash", ce qui provoque quelques désagréments vu que la syntaxe diffère quelque peu ;-\
Ok ba je vais changer ça dès maintenant ;)
Merci une fois de plus
J'ai un dernier petit souci, je sais comment passer des secondes (ex:21.7551) en minute,seconde,ms (ex:0 min 21 sec 7551 ms)
avec quelque chose comme ça:
Pour $ResuDuration= 21.7551

echo DUREE "\t" $(echo "scale = 0; $ResuDuration/$prMin" | bc) min $(echo "$ResuDuration % $prMin" | bc | cut -d'.' -f1) sec $(echo "$ResuDuration % $prMin" | bc | cut -d'.' -f2) ms


Le probleme c'est que je vois pas comment imbriquer ce code dans celui que tu m'a indiqué:
$ awk 'BEGIN{i=0} /black_start/ { i++; gsub(/:/," = ",$1);gsub(/:/," = ",$2);gsub(/:/," = ",$3); printf "%s\n%s\n%s\n%s\n\n","N°"i,$1,$2,$3}' output.txt 


se serait avant le printf et en remplacant $ResuDuration par $3 (pour la DUREE)?!