Recuperer le premier element d'une chaine
Résolu
seb75
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
seb75 Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
seb75 Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je souhaite récupérer le premier élément de chaque ligne d'un texte (fichier3.txt) qui sera "<" ou ">" et d'ecrire ensuite les lignes commencant par "<" dans un fichier4.txt et celles commencant par ">" dans un fichier5.txt, mais je n'y arrive pas.
J'ai pensé à plusieurs solutions mais en vain. Voici ma dernière idée :
while read line
do
$n = substr($line,0,1)
if [$n = "<" ]
then
(echo -e "$line\n") >> fichier4.txt
else
(echo -e "$line\n") >> fichier5.txt
fi
done < fichier3.txt
mon fichier3.txt etant :
1,3c1,6
< <root name="application">
< <configuration name="prod" context="run">
< <backup oneline="true">
---
> <root
> name="application">
> <configuration name="prod"
> context="run">
> <backup
> oneline="false">
Merci de votre aide car je commence un peu à me démoraliser....
je souhaite récupérer le premier élément de chaque ligne d'un texte (fichier3.txt) qui sera "<" ou ">" et d'ecrire ensuite les lignes commencant par "<" dans un fichier4.txt et celles commencant par ">" dans un fichier5.txt, mais je n'y arrive pas.
J'ai pensé à plusieurs solutions mais en vain. Voici ma dernière idée :
while read line
do
$n = substr($line,0,1)
if [$n = "<" ]
then
(echo -e "$line\n") >> fichier4.txt
else
(echo -e "$line\n") >> fichier5.txt
fi
done < fichier3.txt
mon fichier3.txt etant :
1,3c1,6
< <root name="application">
< <configuration name="prod" context="run">
< <backup oneline="true">
---
> <root
> name="application">
> <configuration name="prod"
> context="run">
> <backup
> oneline="false">
Merci de votre aide car je commence un peu à me démoraliser....
A voir également:
- Recuperer le premier element d'une chaine
- Recuperer message whatsapp supprimé - Guide
- Comment recuperer une video sur youtube - Guide
- Chaine tnt gratuite sur mobile - Guide
- Recuperer le son d'une video - Guide
- Récupérer mon compte facebook désactivé - Guide
4 réponses
Ton algorithme semble juste mais j'utilise assez peu read. Ce que j'ai à l'esprit c'est que en shell script quand on lit une valeur on précède la variable de $ or après read il n'y en a pas dans ton code.
Je ne sais pas si la syntaxe de read est telle que tu ne dois pas mettre de $ devant un nom de variable mais ce $ est une généralité en Shell Script. Essai donc ça.
Je ne maitrise pas trop les boucles comme tu le fait mais il me semble avoir lu mes fichiers autrement avec ce type de boucles et la redirection était en première ligne plutôt qu'à la fin.
Il existe plusieurs manière de lire un fichier ligne par ligne je te colle des petits codes issues de mon rapport.
Voilà en espérant que ça aide. :)
PS : En ressortant mes codes on voit qu'il n'y a pas de $ donc ça n'est pas une erreur de ta part mais j'en était plus sûr et je m'en souvenait plus de tout ça. :P
Ah oui et pense à adapter les codes selon tes besoins bien sûr. Moi mon TP c'était de lire le fichier /etc/passwd mais tu peut remplacer par ce qui t'intéresse.
Je ne sais pas si la syntaxe de read est telle que tu ne dois pas mettre de $ devant un nom de variable mais ce $ est une généralité en Shell Script. Essai donc ça.
Je ne maitrise pas trop les boucles comme tu le fait mais il me semble avoir lu mes fichiers autrement avec ce type de boucles et la redirection était en première ligne plutôt qu'à la fin.
Il existe plusieurs manière de lire un fichier ligne par ligne je te colle des petits codes issues de mon rapport.
cat < /etc/passwd | while true do read ligne if [ "$ligne" = "" ] then break fi echo "$ligne" done
function display { while : do read ligne if [ -z "$ligne" ] then break fi echo $ligne done } display < $1
Voilà en espérant que ça aide. :)
PS : En ressortant mes codes on voit qu'il n'y a pas de $ donc ça n'est pas une erreur de ta part mais j'en était plus sûr et je m'en souvenait plus de tout ça. :P
Ah oui et pense à adapter les codes selon tes besoins bien sûr. Moi mon TP c'était de lire le fichier /etc/passwd mais tu peut remplacer par ce qui t'intéresse.
Salut,
#! /bin/bash while read ligne do if [ "${ligne::1}" = "<" ] then echo ${ligne} >> fichier1.txt elif [ "${ligne::1}" = ">" ] then echo ${ligne} >> fichier2.txt fi done < fichier3.txt;-))