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 :

Extraire une partie d'un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Extraire une partie d'un fichier
    Bonjour

    j'ai un fichier texte du type "tab delimited" (i.e. le delimiteur est donc une tabulation)

    toto.txt
    string1 blablabla
    string2 blobloblo

    j'ai besoin de stocker string1 et string dans des variables pour pouvoir les reutiliser apres. String1 et string2 n'ont pas la meme taille et blabla et bloblo n'ont jamais d'espace.

    j'ai vainement cherché une solution avec cut ou grep mais je n'y suis pas arrivé (je connais bien php mais pas trop les commandes shell).

    un coup de main serait sympa

    F

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    awk est fait pour ca. Tu pourras acceder a tes contenus avec $1 et $2.

    Donne un exemple de ce que tu veux faire si tu veux un exemple awk
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    hum, merci, je vais regarder ce que c ce awk.

    ce que je veux faire c'est strocker dans une variable string1 et string2 (qui seront différent a chaque fois évidemment). C'est pour faire marcher un pipeline de traitement de sequences d'ADN.

    avec cut j'arrive bien a extraire string1 et string2 mais il me les met "emsemble" :
    Y=`cut toto.txt -f1`
    echo $Y

    ----> ca donne string1 string2

    et je souhaiterai avoir :
    X = string1
    Y = string2

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    La methode lente et crade :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Y=$(awk '{ print $1 }' )
    Z=$(awk '{ print $2 }' )
    La methode "propre" est de passer les variables de ton script a awk, ce qui te permettra de tout faire en seul appel a awk. Mais je ne me souviens plus comment on passe des variables a awk la tout de suite, donc il faut chercher ca.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    raaa, mache pas, pas de awk installé.
    Ah ca m'enerve, ca doit opas etre si dur que ca a faire.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    awk pas installé ? sur linux ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -Po '[^\t]*\t' fichier
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par ./toto.txt
    string1 blablabla
    string2 blobloblo
    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
    #!/bin/bash
     
    #set -x
     
    input="./toto.txt"
     
    pattern1="blablabla"
    pattern2="blobloblo"
     
    retour1=$(grep $pattern1 $input| cut -f1 -d$'\t')
     
    echo "res1>$retour1"
     
    retour2=$(grep $pattern2 $input| cut -f1 -d$'\t')
     
    echo "res2>$retour2"
    On peut aussi écrire la tabulation en faisant : ctrl+v, tabulation
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat toto.txt
    string1 blablabla
    string2 blobloblo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ source <(awk '{print "var"NR"="$1;}' toto.txt); echo $var1;echo $var2
    string1
    string2
    $ echo $var2
    string2
    Les variables bash obtenues s'appellent "var" suivi du numéro de ligne qui les a définies.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    merci pour toutes vos reponses
    je suis arrivé a trouver une soluce qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    primer_file="primers.txt"
     
    row1=`head -1 $primer_file`
    p1=`echo $row1|cut -f 1 -d' '`
    echo $p1
     
    row2=`tail -1 $primer_file`
    p2=`echo $row2|cut -f 1 -d' '`
    echo $p2

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    à moins de savoir précisément pourquoi tu ne le fais pas, les variables doivent toujours être mises entre guillemets !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Citation Envoyé par arginine Voir le message
    hum, merci, je vais regarder ce que c ce awk.

    ce que je veux faire c'est strocker dans une variable string1 et string2 (qui seront différent a chaque fois évidemment). C'est pour faire marcher un pipeline de traitement de sequences d'ADN.

    avec cut j'arrive bien a extraire string1 et string2 mais il me les met "emsemble" :
    Y=`cut toto.txt -f1`
    echo $Y

    ----> ca donne string1 string2

    et je souhaiterai avoir :
    X = string1
    Y = string2
    Bonjour,
    Pas loin de la solution, mais à ce que je comprend, ton fichier possède plus que 2 lignes et tu veux lire 2 ligne à la fois à chaque itération, voici donc un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat tab_de1.txt
    string1 blablabla
    string2 blobloblo
    string3 blablabla
    string4 blobloblo
    string5 blablabla
    string6 blobloblo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat tab_de.bash
    #!/bin/bash
    while read X
    do 
      read Y
      echo "X=$X"
      echo "Y=$Y"
    done < <(cut -f1 tab_de1.txt )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ./tab_de.bash
    X=string1
    Y=string2
    X=string3
    Y=string4
    X=string5
    Y=string6
    Cordialement.

Discussions similaires

  1. Extraire une partie d'un fichier bin
    Par simon1 dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2009, 15h29
  2. Extraire une partie d'un fichier
    Par Smith_4400 dans le forum Langage
    Réponses: 12
    Dernier message: 03/08/2009, 16h07
  3. Extraire une partie d'un fichier de bytes
    Par Cedwik dans le forum Flex
    Réponses: 1
    Dernier message: 14/04/2008, 11h27
  4. extraire une partie d'un fichier texte
    Par Mydriaze dans le forum Langage
    Réponses: 5
    Dernier message: 15/06/2007, 12h46
  5. Awk extraire une partie d'un fichier
    Par titexe dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2006, 11h54

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