#1 Le 05/10/2015, à 22:50
- Compte supprimé
[Résolu] awk réinitialiser modification sur ligne ?
Bonjour,
Voici la ligne d'orgine qui me sert de travail pour awk:
Stream #0:0(fre): Video: h264 (High), yuv420p, 960x720 [SAR 1:1 DAR 4:3], 1k fps, 23.98 tbr, 1k tbn, 47.95 tbc
Voici le script awk:
#! /bin/bash
awk 'BEGIN {
FS=" ";
}
/Stream/ && /Video:/ {
printf "%s \n" ,$0;
gsub(/.SAR.*$/, "") gsub(/x/, " ") gsub(/,/, " ");
hauteur=$NF;
largeur=$(NF-1);
}
/Stream/ && /Video:/ {
printf "%s \n" ,$0;
}
END {
printf "Hauteur: %s Largeur: %s\n\n" ,hauteur,largeur
}' <<< "$(avconv -i 2>&1 "ma_video.mkv")"
et voici le retour:
Stream #0:0(fre): Video: h264 (High), yuv420p, 960x720 [SAR 1:1 DAR 4:3], 1k fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0:0(fre): Video: h264 (High) yuv420p 960 720
Hauteur: 720 Largeur: 960
Mon problème et ce que je ne comprends pas, concerne le 2ème bloc:
/Stream/ && /Video:/ {
printf "%s \n" ,$0;
}
qui me retourne :
Stream #0:0(fre): Video: h264 (High) yuv420p 960 720
et je veux que cela me retourne:
Stream #0:0(fre): Video: h264 (High), yuv420p, 960x720 [SAR 1:1 DAR 4:3], 1k fps, 23.98 tbr, 1k tbn, 47.95 tbc
il semble que la modification des gsub du 1er bloc modifie la dite ligne.
J'aimerais savoir comment faire pour réinitialiser cette ligne afin de refaire de nouvelle "opération" dessus ???
Dernière modification par Compte supprimé (Le 06/10/2015, à 11:31)
#2 Le 06/10/2015, à 08:06
- credenhill
Re : [Résolu] awk réinitialiser modification sur ligne ?
hello
les gsub ont modifié $0
sauver $0:
ligne=$0;
/Stream/ && /Video:/ {
...
$0=ligne;
/Stream/ && /Video:/ {
...
Hors ligne
#3 Le 06/10/2015, à 11:27
- Compte supprimé
Re : [Résolu] awk réinitialiser modification sur ligne ?
Salut credenhill
Effectivement ta solution fonctionne à merveille !
Ce qui donne au final et même de manière simplifiée par rapport au script initial:
#! /bin/bash
/Stream/ && /Video:/ {
ligne=$0; #Enregistrement de la ligne par défaut
printf "%s \n" ,$0;
gsub(/.SAR.*$/, "") gsub(/x/, " ") gsub(/,/, " ");
hauteur=$NF;
largeur=$(NF-1);
$0=ligne; #Enregistrement de $0 par défaut
printf "%s \n" ,$0;
}
END {
printf "Hauteur: %s Largeur: %s\n\n" ,hauteur,largeur
}' <<< "$(avconv -i 2>&1 "ma_video.mkv")"
et "printf "%s \n" ,$0;" me retourne dans les 2 cas:
Stream #0:0(fre): Video: h264 (High), yuv420p, 960x720 [SAR 1:1 DAR 4:3], 1k fps, 23.98 tbr, 1k tbn, 47.95 tbc
Merci de ton aide !
Dernière modification par Compte supprimé (Le 06/10/2015, à 11:31)
#4 Le 06/10/2015, à 12:19
- pingouinux
Re : [Résolu] awk réinitialiser modification sur ligne ?
Bonjour,
Ceci devrait marcher aussi :
sed -r 'p;s/.* ([0-9]+)x([0-9]+) .*/Hauteur: \2 Largeur: \1/' <<< "$(avconv -i 2>&1 "ma_video.mkv")"
Hors ligne
#5 Le 08/10/2015, à 19:54
- Compte supprimé
Re : [Résolu] awk réinitialiser modification sur ligne ?
Bonjour,
Ceci devrait marcher aussi :sed -r 'p;s/.* ([0-9]+)x([0-9]+) .*/Hauteur: \2 Largeur: \1/' <<< "$(avconv -i 2>&1 "ma_video.mkv")"
Salut pingouinux
Merci pour cette commande.
Perso j'utilise akw mais elle pourra peut-être servir à quelqu'un d'autre qui passera par là.