Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/10/2015, à 23: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, à 12:31)

#2 Le 06/10/2015, à 09: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, à 12:27

Compte supprimé

Re : [Résolu] awk réinitialiser modification sur ligne ?

Salut credenhill

Effectivement ta solution fonctionne à merveille ! smile

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 ! cool

Dernière modification par Compte supprimé (Le 06/10/2015, à 12:31)

#4 Le 06/10/2015, à 13: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, à 20:54

Compte supprimé

Re : [Résolu] awk réinitialiser modification sur ligne ?

pingouinux a écrit :

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 smile

Merci pour cette commande.
Perso j'utilise akw mais elle pourra peut-être servir à quelqu'un d'autre qui passera par là. cool