Extraire champs d'un fichier txt

Fermé
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015 - 30 janv. 2015 à 21:26
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015 - 2 févr. 2015 à 13:15
Bonjour

Voilà je cherche a extraire certaines parties d'un fichier texte dans autant de fichier texte de sortie.

Mon fichier texte a une structure répétitive ressemblant a ceci;

$end


$info=juju,

blablabla
blabla

$end


$info=popo,

bliblibli
blilbli

$end

ce que j'aimerais obtenir par rapport a cet exemple c'est

un fichier se nommant juju.txt et contenant

blablabla
blabla

et un autre fichier se nommant popo.txt et contenant

bliblibli
blilbli

Sachant qu'il y aurait environs 2500 fichier a générer, est ce possible???

J'ai fait quelques recherches sur les pipe et grep mais je n'ai pas trouvé de solution pour extraire et importer avec un nom voulu le contenu de ce qu'il y a dans les balises $end, je précise que suis totalement débutant sous unix et que je participe actuellement a un projet de front-end pour jeux d'arcade sous raspberry, le but est de générer des fichiers contenant les infos des jeux pour les afficher individuellement dans l'interface.

Merci
A voir également:

9 réponses

Utilisateur anonyme
30 janv. 2015 à 23:28
salut,

voici une ligne en awk
awk -F'[=,]' 'BEGIN{RS="\\$end"}($2){print gensub("(^\n|\n$)","","g",$3)>$2} tonFichier
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
31 janv. 2015 à 11:01
Bonjour et merci pour cette réponse.

Alors cela ne fonctionne pas, j'ai une erreur

./test.awk: line 2: $'\r': command not found
./test.awk: line 3: $'history\r': command not found
./test.awk: line 4: $'\r': command not found

history est le nom de fichier.

Bon cela dit je ne connaissais pas la commande Awk, et ses possibilités sont tout a fait adaptées a ce que je veux faire.

Un grand merci déjà pour votre aide et de m'avoir mis sur cette voie, voilà qui je pense va m'aider a résoudre cette situation.

Je vais creuser dans cette direction.

Merci une fois de plus.....
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
31 janv. 2015 à 11:31
hello
le fichier test.awk a été créé sur Windows ?
il contient des ^M en fin de lignes ?
cat -A test.awk
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
31 janv. 2015 à 21:39
En effet recréer sous Raspberry, et il n'y a plus de ^M a la fin
Testé avec cat -A test.awk

cela dit:

./test.awk: line 1: syntax error near unexpected token `('
./test.awk: line 1: `awk -F[=,]' 'BEGIN{RS="\\$end"}($2){print gensub("(^\n|\n$)","","g",$3)>$2}'

bon je cherche.......
0
Utilisateur anonyme
31 janv. 2015 à 21:53
il manque un apostrophe avant le crochet ouvrant :
awk -F '[=,]'
0

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

Posez votre question
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
31 janv. 2015 à 22:19
Merci
En effet corrigé mais

./test.awk: line 1: unexpected EOF while looking for matching `''
./test.awk: line 3: syntax error: unexpected end of file
0
Utilisateur anonyme
31 janv. 2015 à 22:29
c'est quoi ce caractère
`
?
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
31 janv. 2015 à 22:37
Et bien justement j'arrive pas a comprendre d'où il sort, quand on regarde le quatrième message de ce post on le voit au début du script, et je ne sais pas pourquoi, car il n'a jamais était écrit.
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
1 févr. 2015 à 00:15
bon j'ai trouvé d'où venait ce problème; il fallait poser un ' en fin de code.
awk -F'[=,]' 'BEGIN{RS="\\$end"}($2){print gensub("(^\n|\n$)","","g",$3)>$2}'

par contre:
awk: line 2: function gensub never defined
/home/pi/test/history.txt: line 1: $'\r': command not found
/home/pi/test/history.txt: line 2: $'\r': command not found
/home/pi/test/history.txt: line 3: $'\r': command not found
/home/pi/test/history.txt: line 4: $'=juju,\r': command not found
/home/pi/test/history.txt: line 5: $'\r': command not found
/home/pi/test/history.txt: line 6: $'blablabla\r': command not found
/home/pi/test/history.txt: line 7: $'blabla\r': command not found
/home/pi/test/history.txt: line 8: $'\r': command not found
/home/pi/test/history.txt: line 9: $'\r': command not found
/home/pi/test/history.txt: line 10: $'\r': command not found
/home/pi/test/history.txt: line 11: $'\r': command not found
/home/pi/test/history.txt: line 12: $'=popo,\r': command not found
/home/pi/test/history.txt: line 13: $'\r': command not found
/home/pi/test/history.txt: line 14: $'bliblibli\r': command not found
/home/pi/test/history.txt: line 15: $'blilbli\r': command not found
/home/pi/test/history.txt: line 16: $'\r': command not found

j'ai fait un sudo dos2unix

mais pareil................
0
les
\r
montrent que ton fichier est encore au format DOS.

pour
gensub
, j'avais trouvé que c'était plus élégant, mais si ta version de
awk
ne reconnaît pas cette fonction...
awk -F'[=,]' 'BEGIN{RS="\\$end"}($2){gsub("(^\n|\n$)","",$3); print $3>$2}' 


ce serait bien de nous montrer ton script en entier.
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
1 févr. 2015 à 11:39
Tout d'abord merci de porter autant d'intérêt a ma situation.

Alors juste pour information je travaille a distance sur mon raspberry avec vnc, avec une machine sous seven, et je pense que c'est peut être a cause de ça que le script est reconnu comme étant DOS...??....

j'ai beau lui avoir fait un sudo dos2unix , cela ne change rien...

Comme je l'ai dit dans mon premier post je suis totalement débutant dans ce domaine et je commence a me documenter depuis peu.

Donc pour plus de confort je vais installer un système unix sur une autre machine.
Pour gensub en effet j'avais déjà vu sur d'autre tuto que la fonction était généralement nommée gsub.

que me conseillez vous comme système UNIX ??

Concernant le script et bien tous ce que vous m'avais fournis est là, j'ai juste besoin d'un batch pour créer ces fameux fichier, qui seront fournis avec la version finale du Front-end.

http://www.tuxme.net/

Voilà et encore merci.
0
Utilisateur anonyme
1 févr. 2015 à 13:35
il n'y a pas que le script à passer à
dos2unix
, il faut y passer le fichier à traiter.

gsub
et
gensub
sont deux fonctions différentes, cette dernière n'étant pas implémentée dans
mawk
, qui retourne ce même message «[...]never defined» :(

pour la distribution, je te recommande Mageia.
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
1 févr. 2015 à 21:44
mageia a l'air bien sympa, je vais test cela dans la semaine.

Pour en revenir a nos moutons, en effet le fichier txt avait besoin d'un dos2unix, et la commande gensub doit être remplacé par gsub, je récupère bien les éléments voulus dans le terminal, mais il me semble que gsub ne connait pas "g"

awk: line 1: syntax error at or near g
/home/pi/test/history.txt: line 4: =juju,: command not found
/home/pi/test/history.txt: line 6: blablabla: command not found
/home/pi/test/history.txt: line 7: blabla: command not found
/home/pi/test/history.txt: line 12: =popo,: command not found
/home/pi/test/history.txt: line 14: bliblibli: command not found
/home/pi/test/history.txt: line 15: blilbli: command not found
0
effectivement, ce ne sont pas les mêmes fonctions, et le g n'apparaît plus dans la ligne donnée au #10.
0
qbert Messages postés 9 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 2 février 2015
2 févr. 2015 à 13:15
Ha oui en effet je n'avais pas remarqué qu'il y avait plus que la fonction qui avait changé.

par contre cela ne renvoie rien, ni message d'erreur, ni texte dans la terminal.

Bon je pense que l'on va arrêter là, je ne veut pas prendre sur votre temps indéfiniment, surtout que je me suis aperçu que le vrais fichier a traiter n'avait pas la même structure répétitive que l'exemple que j'avais proposé dans mon premier post, les espaces ne sont pas disposés de la même manière...

Je vais plutôt me documenter et travailler dans ce sens là par moi même, cela me permettra, de mieux cerner les possibilités avec awk et d'en comprendre les schémas.

Je tiens une nouvelle fois a vous remercier pour cette aide fort constructive et le temps que vous m'avez accorder.
0