[bash] traitements multiples sur un fichier
Résolu/Fermé
Utilisateur anonyme
-
9 juin 2011 à 15:51
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 juin 2011 à 20:37
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 juin 2011 à 20:37
A voir également:
- [bash] traitements multiples sur un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
4 réponses
laoshu
Messages postés
1231
Date d'inscription
mardi 7 juin 2011
Statut
Membre
Dernière intervention
24 mai 2015
350
9 juin 2011 à 16:40
9 juin 2011 à 16:40
Bonjour,
Qu'est ce que ça donne si tu essaye :
#!/bin/bash
echo " Donnez le nom du corpus: " ;
read corpus ;
#----------------------------------
encodage=$(file -i corpus-test.txt)
#détermine l'encodage du texte
iconv -f $encodage -t UTF-8 corpus-test.txt > corpus-test.u8
#si l'encodage n'est pas en utf-8, je le converti en utf-8 et change son nom
#----------------------------------
sed -e 's/^[ \t]*//;s/[ \t]*$//' corpus-test.u8 > corpus-test.tok
#segmentation du texte
sort < corpus-test.tok | uniq -c \ | sort -rg > corpus-test.tok.freq
#calcul de la fréquence et trie par ordre décroissant
Qu'est ce que ça donne si tu essaye :
#!/bin/bash
echo " Donnez le nom du corpus: " ;
read corpus ;
#----------------------------------
encodage=$(file -i corpus-test.txt)
#détermine l'encodage du texte
iconv -f $encodage -t UTF-8 corpus-test.txt > corpus-test.u8
#si l'encodage n'est pas en utf-8, je le converti en utf-8 et change son nom
#----------------------------------
sed -e 's/^[ \t]*//;s/[ \t]*$//' corpus-test.u8 > corpus-test.tok
#segmentation du texte
sort < corpus-test.tok | uniq -c \ | sort -rg > corpus-test.tok.freq
#calcul de la fréquence et trie par ordre décroissant
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 juin 2011 à 19:28
9 juin 2011 à 19:28
Salut,
C'est obligatoire en bash?
C'est obligatoire en bash?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
9 juin 2011 à 19:32
9 juin 2011 à 19:32
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 juin 2011 à 19:34
9 juin 2011 à 19:34
Re,
Ok, merci ;-)
Ok, merci ;-)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 juin 2011 à 19:53
9 juin 2011 à 19:53
Re,
:~$ cat plop 1835 1812 1693 1692 1587 1566 1531 1499 1465 89 74 29 23 23 23 20 19 17 16 4 3 2° 1° 1er 1er ôtée ôtait îles îles îles îles île île être être être être être être être être être être être être être être être être être être être :~$ perl -ne '$h{$_}++;END{for $e(reverse sort {$h{$a} <=> $h{$b}}keys %h){print "$h{$e} $e"}}' plop 19 être 4 îles 3 23 2 île 2 1er 1 1465 1 1812 1 3 1 1499 1 1587 1 1566 1 17 1 ôtée 1 1° 1 ôtait 1 1692 1 20 1 1693 1 1835 1 89 1 29 1 16 1 74 1 2° 1 4 1 1531 1 19 :~$
Utilisateur anonyme
9 juin 2011 à 20:31
9 juin 2011 à 20:31
Merci beaucoup à vous tous pour toutes vos réponses. J'ai réussi à avoir ce que je voulais. J'avais oublié un | dans mon script et c'est pour ça que tout était chamboulé. Je pensais pourtant m'être bien relue ^^
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 juin 2011 à 20:37
9 juin 2011 à 20:37
Re,
Tant mieux ;-)
Tu peux mettre le sujet en résolu.
Tant mieux ;-)
Tu peux mettre le sujet en résolu.
9 juin 2011 à 16:48
Devrait aller mieux ;-))
9 juin 2011 à 17:02
je ferai bien de trouver un exemplaire du livre dont tu parlais...
9 juin 2011 à 17:04
Peux-tu m'expliquer à quoi cela correspond stp ? J'imagine qu'il s'agit d'expressions régulières mais je n'arrive pas à les interpréter :/
9 juin 2011 à 17:19
J'ai toujours le même problème avec uniq. Mais peut-être est ce lié à mon fichier corpus-test.tok. En effet je suis censé avoir une segmentation du texte par mots pourtant il n'y a aucune différence entre mon fichier texte et ce fichier :/ Je ne vois pas la segmentation.
Peut être devrais-je effectuer ma segmentation en remplaçant les espaces par un retour à la ligne pour que la commande uniq fonctionne ?
J'ai essayé avec cette commande :
perl -pe 's/[[ :punct :]]+/ $& /g' \ | tr -s '[ :space :]' '[\n*]' \ < corpus-test.u8 > corpus-test.tok
mais rien ne se passe, et lorsque je lance le script sous cygwin j'ai les messages d'erreurs suivants :
- Can't open : No such file or directory
tr : extra operand ' '
try 'tr --help' for more information
uniq : No such file or directory
9 juin 2011 à 17:23
Si je me trompe et que tu as de la chance, Zipe corrigeras...
file -i corpus.txt
revoie une ligne :
corpus.txt: text...; charset=[ce que tu cherches]
/*=/ permet de n'avoir que la partie qui suit le '=' donc (ici) ce que tu cherches
Avec une question pour notre correcteur, juste pour savoir s'il a lu ou non...
encodage=$(file -i corpus-test.txt | cut -d= -f2 )
cela aurait eu le même effet ?