Extraire de donnée d'1 fichier ascii (unix)
Résolu
fbgo88
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
fbgo88 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
fbgo88 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
sous unix, j'aimerai faire un programme pour extraire de données dans un fichier de 5 méga d'octets environ, ( en c ou par awk si possible) du genre :
extraire_donnee = moulinette (nom_du_fichier, position_debut_de_donnée, longeur_de_la_donnée).
nom_du_fichier : le nom du fichier
position_debut_de_donnée : position en octet du début de la donnée à extraire
longueur_de_la_donnée : longeur en octet de la donnée.
exemple :
donnée = (toto.txt, 450000, 80)
j'ai effectué un programme par les commandes tail et head, mais j'avoue que le traitement c'est assez long, car je dois extraire de ce fichier environ 60000 données de 80 octets, et malheureusement ce fichier n'a pas de retour chariot, c'est comme une ligne de 5000000 de caractères, et la mémoire est insufissante pour charger le fichier complet.
J ai essayé par substr sous awk, mais au bout d'un moment ça décale, on me dit que c'est un soucis de buffer...
si quelqu'un a une idée pour cette moulinette, j'avoue qu'il m'aidera beaucoup, ou existe t-il deja une commande sous unix?
Merci d'avance de votre réponse...
sous unix, j'aimerai faire un programme pour extraire de données dans un fichier de 5 méga d'octets environ, ( en c ou par awk si possible) du genre :
extraire_donnee = moulinette (nom_du_fichier, position_debut_de_donnée, longeur_de_la_donnée).
nom_du_fichier : le nom du fichier
position_debut_de_donnée : position en octet du début de la donnée à extraire
longueur_de_la_donnée : longeur en octet de la donnée.
exemple :
donnée = (toto.txt, 450000, 80)
j'ai effectué un programme par les commandes tail et head, mais j'avoue que le traitement c'est assez long, car je dois extraire de ce fichier environ 60000 données de 80 octets, et malheureusement ce fichier n'a pas de retour chariot, c'est comme une ligne de 5000000 de caractères, et la mémoire est insufissante pour charger le fichier complet.
J ai essayé par substr sous awk, mais au bout d'un moment ça décale, on me dit que c'est un soucis de buffer...
si quelqu'un a une idée pour cette moulinette, j'avoue qu'il m'aidera beaucoup, ou existe t-il deja une commande sous unix?
Merci d'avance de votre réponse...
A voir également:
- Extraire de donnée d'1 fichier ascii (unix)
- Code ascii - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
5 réponses
Salut,
Essaie avec "sed" :
Essaie avec "sed" :
sed 's/^.\{450000\}\(.\{80\}\).*/\1/' toto.txtN'ayant pas de fichier de cette taille je n'ai pu tester qu'à une moindre échelle ... ;-))
Salut,
et avec Perl, ça ne te conviens pas?!
et avec Perl, ça ne te conviens pas?!
~$ time perl -e 'print "a" x 5000000' > fbgo88.txt real 0m0.109s user 0m0.016s sys 0m0.080s ~$ cat fbgo88.txt | wc -c 5000000 ~$ du -sh fbgo88.txt 4,8M fbgo88.txt ~$ time perl -ne 'print unpack("x45000 A80",$_)' fbgo88.txt > res_fbgo88.txt real 0m0.101s user 0m0.056s sys 0m0.028s lami20j@debian:~$ cat res_fbgo88.txt | wc -c 80
merci de vos reponses
helas j'ai une vielle becane unix (plus de 8 ans), et je n' ai pas perl dessus.
Mais je vais essayer avec la commande sed.
helas j'ai une vielle becane unix (plus de 8 ans), et je n' ai pas perl dessus.
Mais je vais essayer avec la commande sed.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
helas j'ai une vielle becane unix (plus de 8 ans), et je n' ai pas perl dessus.
As-tu vérifié?
D'après ce que je lit dans le livre de Larry Wall, Perl a été conçu au depart comme langage pour administrer UNIX
whereis perl te donne quoi?
D'ailleurs les regex n'accepte pas un quantificateur plus de 32767
tu dois tricher, mais tu attends une éternité :-))
essaie avec
helas j'ai une vielle becane unix (plus de 8 ans), et je n' ai pas perl dessus.
As-tu vérifié?
D'après ce que je lit dans le livre de Larry Wall, Perl a été conçu au depart comme langage pour administrer UNIX
whereis perl te donne quoi?
D'ailleurs les regex n'accepte pas un quantificateur plus de 32767
tu dois tricher, mais tu attends une éternité :-))
essaie avec
#include <stdio.h> int main() { FILE *fic; char c[81]; fic=fopen("fbgo88.txt","rb"); fseek(fic,450000,SEEK_CUR); fread(c,sizeof(char),80,fic); c[80]='\0'; printf("%s",c); return 0; }
N'ayant pas de fichier de cette taille je n'ai pu tester qu'à une moindre échelle ... ;-))
Tu as commencé être paresseux :-)), Oups, je voulais dire perlien :-DD
Tu peux créér vite fait ce fichier :-))