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 :

Question sur un cut/paste dans un même fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut Question sur un cut/paste dans un même fichier
    Bonjour à tous,

    Je souhaite copier le contenu de la première colonne d'un fichier, pour le fusionner au contenu de la dernière colonne.

    A partir de l'exemple suivant :

    Marc Dupont Toulouse 31
    Paul Durand Bordeaux 33
    Eric Michel Paris 75

    (Les séparations sont des tabulations).

    Mon but est d'obtenir :

    Marc Dupont Toulouse 31Marc
    Paul Durand Bordeaux 33Paul
    Eric Michel Paris 75Eric

    Malgrés mes recherches dans les manuels utilisateurs, je n'ai pas réussi à combiner un cut avec un paste et avoir le résultat dans une des colonnes.

    Merci,
    Lucie.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Avec "awk" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat plop 
    Marc	Dupont	Toulouse	31
    Paul	Durand	Bordeaux	33
    Eric	Michel	Paris	75
     
    $ awk -F'\t' '{ printf $0$1"\n" }' plop 
    Marc	Dupont	Toulouse	31Marc
    Paul	Durand	Bordeaux	33Paul
    Eric	Michel	Paris	75Eric
     
    $

  3. #3
    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,

    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paste -d '' fichier.in <(cut -d ' ' -f1 fichier.in)
    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -d ' ' -f1 fichier.in | paste -d '' fichier.in -
    le séparateur du cut est obtenu avec Ctrl-V Ctrl-I
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Avec "awk" ?


    $ awk -F'\t' '{ printf $0$1"\n" }' plop
    Marc Dupont Toulouse 31Marc
    Paul Durand Bordeaux 33Paul
    Eric Michel Paris 75Eric

    $[/code]
    C'est nickel, merci

    Est-ce que l'opération inverse est possible, à savoir enlever le contenue de la première colonne au contenu de la dernière ?

    Et retrouver :
    Marc Dupont Toulouse 31
    Paul Durand Bordeaux 33
    Eric Michel Paris 75

    L.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par dlm64 Voir le message
    Est-ce que l'opération inverse est possible, à savoir enlever le contenue de la première colonne au contenu de la dernière ?
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $ cat fich 
    Marc	Dupont	Toulouse	31Marc
    Paul	Durand	Bordeaux	33Paul
    Eric	Michel	Paris	75Eric
     
    $ sed -r 's/([^ ]*)(.*)\1/\1\2/' fich 
    Marc	Dupont	Toulouse	31
    Paul	Durand	Bordeaux	33
    Eric	Michel	Paris	75
     
    $

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' '{sub($1,"",$NF)}1' fichier.in
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ sed -r 's/([^ ]*)(.*)\1/\1\2/' fich 
    $
    Ha là, ça ne fonctionne pas ..
    Pour la mise en forme, mon fichier ressemble plutôt à cela :

    ___Marc Dupont Toulouse 31___Marc
    ___Paul Durand Bordeaux 33___Paul
    ___Eric Michel Paris 75___Eric

    Ou ___ sont trois espaces (ça ne se voit pas sur le site)
    Du coup, il faut que j'intègre les 3 espaces dans la première colonne ..

  8. #8
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' '{sub($1,"",$NF)}1' fichier.in
    idem avec le awk ..

  9. #9
    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
    ah?! il y a autre chose alors, parce que ça fonctionne très bien pour moi, avec un fichier au format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <espace><espace><espace><donnée><tabulation><donnée><tabulation><donnée><tabulation><donnée><espace><espace><espace><donnée>
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par dlm64 Voir le message
    Ha là, ça ne fonctionne pas ..
    Pour la mise en forme, mon fichier ressemble plutôt à cela :

    ___Marc Dupont Toulouse 31___Marc
    ___Paul Durand Bordeaux 33___Paul
    ___Eric Michel Paris 75___Eric

    Ou ___ sont trois espaces (ça ne se voit pas sur le site)
    Du coup, il faut que j'intègre les 3 espaces dans la première colonne ..
    Avec un exemple entre balises "[code]" et "[/code]",le bon format de fichier et toutes les données nécessaires à la bonne compréhension du problème, on éviterait pas mal d'aléas sans compter les pertes de temps

    Avec cette syntaxe sed -r 's/([^\t]*)(.*)\1/\1\2/' ça devrait aller mieux

    J'ai juste remplacer l'espace vide de la 1ère référence arrière par une tabulation (\t).

  11. #11
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ah?! il y a autre chose alors, parce que ça fonctionne très bien pour moi,
    Vous avez raison ..

    J'utilise un autre awk pour faire un autre tri et mettre en forme, du coup mon fichier à traiter ressemble en fait à ça : (pardon zipe31)

    ___Marc (31___Marc) Dupont Toulouse
    ___Paul (33___Paul) Durand Bordeaux
    ___Eric (75___Eric) Michel Paris

    (ou les _ sont des espaces, mais pas une tabulation)

    Avec pour souhait :

    ___Marc (31) Dupont Toulouse
    ___Paul (33) Durand Bordeaux
    ___Eric (75) Michel Paris

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat plop 
       Marc (31   Marc) Dupont Toulouse
       Paul (33   Paul) Durand Bordeaux
       Eric (75   Eric) Michel Paris
     
    $ sed 's/\b   [^)]*//' plop 
       Marc (31) Dupont Toulouse
       Paul (33) Durand Bordeaux
       Eric (75) Michel Paris
     
    $

  13. #13
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ 
    $ sed 's/\b   [^)]*//' plop 
    $
    Merci beaucoup !

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/02/2009, 10h34
  2. [Delphi 7] Question sur le CTRL-Click dans l'EDI
    Par MiJack dans le forum Delphi
    Réponses: 2
    Dernier message: 07/11/2006, 22h06
  3. Question sur une relation ternaire dans un MCD
    Par sylsau dans le forum Schéma
    Réponses: 5
    Dernier message: 05/03/2006, 20h00

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