Récupérer du texte dans un fichier pour y mettre en variable

Résolu/Fermé
xunil2003 Messages postés 765 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 5 septembre 2024 - Modifié par xunil2003 le 8/03/2013 à 15:36
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 9 mars 2013 à 18:50
Bonjour,

Je voudrais récupérer du texte dans un fichier afin de le mettre en variable.
Dans le fichier j'ai cette ligne
France 5(GR1 A):490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:320:330:260 

il faut que je récupéré :
1/ France 5 (comment récupérer le texte en début de la ligne jusqu'à "( " ) le nom de la chaîne.
2/ 490000000 (comment récupérer le texte de ":" jusqu'à ":") La fréquence.
3/ 8 (comment récupérer le texte de "BANDWIDTH_" à "_MHZ") le numéro de bandwidth.
4/ 260 (comment récupérer le texte de ":" jusqu'à la fin de la ligne.) le numéro de programme.

Dans ce fichier j''ai plusieurs lignes identique a récupérer

Exemple :
France Ô(GR1 A):490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:520:530:261 
ARTE HD(Multi 4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:720:730:1031 
ARTE(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:720:730:1543 
M6(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:120:130:1025 
W9(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:1026 
NT1(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:320:330:1027 
NRJ12(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:1538 
TMC(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:620:630:1542 
HD1(MHD7):538000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:120:130:2561 
L'Equipe 21(MHD7):538000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:2562


Pour recréer le fichier autrement via un script.
seulement je ne comprend pas comment y faire avec sed ????

J'ai essayé comme ceci avec sed pour récupérer le nom de la chaine TV mais je n'y arrive pas
NOMCHAINETV=$(echo "$fichier" | sed 's/\:.*$//')

Comment puis je faire ?
Merci.

A voir également:

5 réponses

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
8 mars 2013 à 15:59
hello
une variable pour tout ?
$ CHAINES=$(awk -F"[(:_]" '{print $1, $3, $7, $NF}' fichier)
$ echo "$CHAINES"
France 5 490000000 8 260 
France Ô 490000000 8 261 
ARTE HD 506000000 8 1031 
ARTE 514000000 8 1543 
M6 506000000 8 1025 
W9 506000000 8 1026 
NT1 506000000 8 1027 
NRJ12 514000000 8 1538 
TMC 514000000 8 1542 
HD1 538000000 8 2561 
L'Equipe 21 538000000 8 2562
$  
1
xunil2003 Messages postés 765 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 5 septembre 2024 14
Modifié par xunil2003 le 8/03/2013 à 19:23
Bonjour,

Merci pour votre réponse.
Mais votre solution ne peut pas aller dans mon script.
Vu que je dois écrire un nouveau fichier pour la conversion.
C'est pour cela que je dois récupérer le le contenu dans une variable pour chacun des textes à récupérer afin de les écrire dans un nouveau fichier.

Mon script
#!/bin/bash 
echo "" 
echo "+------------------------------------------------------+" 
echo "| Conversion du fichier channels.conf en m3u de w_scan |" 
echo "+------------------------------------------------------+" 
echo "" 
read -p "Veuillez indiquer l'adaptateur a utiliser" 
echo " Par default : 0 = pour l'adapter0" 
read -p "Appuyer sur une touche pour continuer ..." ADAPTATEUR 


PLAYLIST=$2 
SOURCEFICHIER=$1 

echo "#EXTM3U" > $PLAYLIST 

echo "Veuillez patienter pendant que le fichier $SOURCEFICHIER est analysé" 
cat $SOURCEFICHIER | while read FICHIER 
# Analyser le nom du canal, la fréquence, le BANDWIDTH et le numéro du programme 
do 
  CHAINENOM=$(echo "$FICHIER" | sed 's/\:.*$//') 
  CHAINEFREQ=$(echo $FICHIER | sed 's/\:/+/1' | sed 's/.*+//' | sed 's/\:.*//' | sed 's/$/000/') 
  CHAINEBANDWIDTH=$(echo $FICHIER | sed '??????????????') 
  CHAINEPROGRAMME=$(echo "$FICHIER" | sed '???????') 
# les informations à écrire dans le nouveau fichier converties en m3u 
  echo "#EXTM3U" >> $PLAYLIST 
  echo "#EXTINF:0,$CHAINENOM" >> $PLAYLIST 
  echo "#EXTVLCOPT:dvb-adapter=$ADAPTATEUR" >> $PLAYLIST 
  echo "#EXTVLCOPT:dvb-frequency=$CHAINEFREQ" >> $PLAYLIST 
  echo "#EXTVLCOPT:dvb-bandwidth=$CHAINEBANDWIDTH" >> $PLAYLIST 
  echo "#EXTVLCOPT:dvb-bandwidth=$CHAINEPROGRAMME" >> $PLAYLIST 
  #echo "dvb-t://" >> $PLAYLIST 
   echo "dvb://" >> $PLAYLIST 
done 
echo "Le fichier $PLAYLIST est créer" 
echo "Pour vérifier le bon fonctionnement du fichier veuillez taper :" 
echo "vlc $PLAYLIST"
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
Modifié par zipe31 le 8/03/2013 à 19:51
Salut,

Tu peux adapter la solution de dubcek à ton script en récupérant dans chaque variable que le numéro de champ qui convient...

CHAINENOM=$(awk -F"[(:_]" '{print $1}' <<<${FICHIER}) 
CHAINEFREQ=$(awk -F"[(:_]" '{print $3}' <<<${FICHIER}) 
CHAINEBANDWIDTH=$(awk -F"[(:_]" '{print $7}' <<<${FICHIER}) 
CHAINEPROGRAMME=$(awk -F"[(:_]" '{print $NF}' <<<${FICHIER})


Sinon avec sed ça donnerait ça :

CHAINENOM=$(sed -n 's/\([^(]*\)(.*/\1/p' <<<${FICHIER}) 
CHAINEFREQ=$(sed -n 's/[^:]*:\([^:]*\):.*/\1/p' <<<${FICHIER}) 
CHAINEBANDWIDTH=$(sed -n 's/.*BANDWIDTH_\([^_]*\)_.*/\1/p' <<<${FICHIER}) 
CHAINEPROGRAMME=$(sed -n 's/.*:\([^ ]*\) *$/\1/p' <<<${FICHIER})
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 9/03/2013 à 09:25
awk -F"[(:_]" '{print $1, $3, $7, $NF}' $SOURCEFICHIER | while read CHAINENOM CHAINEFREQ CHAINEBANDWIDTH CHAINEPROGRAMME ; do 
... 
...  
done
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
9 mars 2013 à 14:10
et aussi
while read FICHIER ; do 
oIFS=$IFS; IFS="(:_"; set -- $FICHIER; CHAINENOM=$1; CHAINEFREQ=$3; CHAINEBANDWIDTH=$7; CHAINEPROGRAMME=${!#}
IFS=$oIFS
...
...
done < $SOURCEFICHIER
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 765 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 5 septembre 2024 14
9 mars 2013 à 16:55
Bonjour,

Merci à tous pour vos réponse.
Dans un autre fichier je dois ajouter a chaque ligne le mot "adapater=5:"
entre le mot "satno=1:" et "frequency=10723000:"
<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>

Extrait du fichier
<title>0004. Deepam TV</title>
				<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>
				<extension application="http://www.videolan.org/vlc/playlist/0">
					<vlc:id>3</vlc:id>
					<vlc:option>program=4606</vlc:option>
				</extension>
			</track>
			<track>
				<title>0005. NPR</title>
				<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>
				<extension application="http://www.videolan.org/vlc/playlist/0">
					<vlc:id>4</vlc:id>
					<vlc:option>program=4614</vlc:option>
				</extension>
			</track>
			<track>
				<title>0006. Thendral</title>
				<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>
				<extension application="http://www.videolan.org/vlc/playlist/0">
					<vlc:id>5</vlc:id>
					<vlc:option>program=4622</vlc:option>
				</extension>
			</track>
			<track>
				<title>0007. RDPi Radio</title>
				<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>
				<extension application="http://www.videolan.org/vlc/playlist/0">
					<vlc:id>6</vlc:id>
					<vlc:option>program=4630</vlc:option>
				</extension>
			</track>
			<track>

Comment dois je faire ?

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
9 mars 2013 à 18:50
sed '/satno=1/{s/:/&adapater=5&/2}' fichier
0