IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Filtre de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 96
    Par défaut Filtre de fichiers
    Bonjour,
    je possede des fichiers de la formes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    algorithm	NN	algorithm
    and	CC	and
    a	DT	a
    decryption	NN	decryption
    algorithm	NN	algorithm
    .	SENT	.
    But	CC	but
    6	CD	6
    00:00:21,069	CD	@card@
    -->	NN	-->
    00:00:26,005	CD	@card@
    in	IN	in
    fact	NN	fact
    ,	,	,
    a	DT	a
    cypher	NN	cypher
    is	VBZ	be
    et mon but est de les filter, c'est à dire garder que la derniere colonne (excepté le caractere "@card@").
    J'ai fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/sh
    s/.*?[A-Z]\t/ /
    et j'obtiens l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ test2.tag.txt  filtre.sh
    1: not found
    00:00:00,000: not found
    ./test2.tag.txt: 3: Syntax error: newline unexpected
    sachant que filtre.sh est mon script et test2.tag.txt est le fichier contenant le text

    est ce que vous pouvez m'aider à corriger mon script
    Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    ceci ne constitue pas un script, et n'est pas une commande shell.
    C'est une substitution sed, perl, ou ...

    @card@ n'est pas un caractère, mais un mot.

    A la fin, tu dois avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    algorithm
    decryption
    algorithm
    ?

    $ test2.tag.txt filtre.sh test2... n'est pas une commande, ou un fichier exécutable; ça devrait être l'argument du script.

    Voilà, voilà ! Tu as de la lecture à venir : regarde le lien concernant le shell dans ma signature.
    Tu liras avec profit :
    le Bash Programming Intro Howto
    l'ABS
    ...GIYF
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par MMDM12 Voir le message
    mon but est de les filter, c'est à dire garder que la derniere colonne (excepté le caractere "@card@").
    Quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat filtre.sh
    #!/bin/sh
    awk '{print $3}'
     
    $ filtre.sh < test2.tag.txt

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 96
    Par défaut
    merci à vous deux,
    @ N_BaH, vous avez parfaitement tout resumé,
    ouff, je suis passé completement à cote de la plaque.
    @ jack-ft, ç'est l'idée principale, mais je pense qu'il preferable de le faire en shell , parce que le script prend en argument un fichier (ou un repertoire de fichier) et le resultat est stocké aussi dans un fichier, a moins que AWK soit plus efficace et en plus j'utilise Cygwin sous windows.

    Merci

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    si le dernier champ n'est pas @card@, imprimer le dernier champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     awk '$NF != "@card@"{print $NF}' ton_fichier
    algorithm
    and
    a
    decryption
    algorithm
    .
    but
    6
    -->
    in
    fact
    ,
    a
    cypher
    be
    parce que le fichier comporte 3 colonnes sur toutes les lignes.
    si ça te va, tant mieux; sinon il faut définir un critère supplémentaire pour obtenir ce que tu veux.
    d'où vient ce fichier ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 96
    Par défaut
    C'est parfait @N_BaH,
    Je veux filter tout ce qui n'est pas un mot "correcte" comme la ponctuation, les caractere du type ], -->, etc.
    Ma question est de savoir est ce qu'il y a un moyen de faire comme avec les REGEX, quelque chose du genre tout ce qui ressemble à [a-z] pour eviter de lister les mots et caracteres à filter parce que je ne connait pas la liste exhaustive (car j'ai plusieurs fichiers)

    Merci

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par MMDM12 Voir le message
    C'est parfait @N_BaH,
    Je veux filter tout ce qui n'est pas un mot "correcte" comme la ponctuation, les caractere du type ], -->, etc.
    Ma question est de savoir est ce qu'il y a un moyen de faire comme avec les REGEX, quelque chose du genre tout ce qui ressemble à [a-z] pour eviter de lister les mots et caracteres à filter parce que je ne connait pas la liste exhaustive (car j'ai plusieurs fichiers)

    Merci
    Ben oui, tu peux utiliser une regexp soit en positif soit en négatif. Quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ grep -i -x '[a-z \t]*' | awk '{print $3}'  # filtre "positif"
    $ grep -v '[@,-[]]' | awk '{print $3}'  # filtre "négatif"
    Il n'y a que toi qui puisses définir ce que tu appelles "un mot correct"!

Discussions similaires

  1. [HTML 4.0] Filtre sur fichier Txt
    Par yann.ydu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 12/08/2009, 12h50
  2. excel 2007 filtres de fichiers
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/06/2008, 14h13
  3. [VBNET] Double Filtre de fichiers
    Par XnoTonio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/07/2006, 11h54
  4. Filtre de fichier
    Par sam.fet dans le forum Linux
    Réponses: 5
    Dernier message: 11/05/2006, 13h43
  5. [FileChooser] filtre type *fichier.ext
    Par Terminator dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 26/04/2006, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo