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 :

decouper un string


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut decouper un string
    Salut a tous
    faites pas attention au titre (jajajaja)

    Alors voila, je voudrais modifier une ligne avec des champs en la decoupant, voici un exemple:

    J'ai ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    000000009 653   L $$aURANIUM; URANIUM ORES; SPAIN; ENVIRONMENT; HYDROMETALLURGY
    Et je voudrais obtenir ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    000000009 653   L $$aURANIUM
    000000009 653   L $$aURANIUM ORES
    000000009 653   L $$aSPAIN
    000000009 653   L $$aENVIRONMENT
    000000009 653   L $$aHYDROMETALLURGY
    Est ce possible en bash?
    Le fichier possede plus de 30 000 lignes
    et chaque enregistrement aura une quantité diferente d'info separée par des ";"
    UN enregistrement est une succesion de lignes qui commencent par un numero...la borne superieur pour les distinguer est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    000000002 LDR   L -----nam--2200337Ia-45e0
    et la derniere:

    Aussi si je dois appliquer le meme boulot a une autre ligne avec un autre numero...au lieu de 653 ca pourrait etre 510 par exemple.
    Pourrais-je avoir l'option de mettre ca dans la commande...comme ceci:

    sh decoupage.sh fichiersource.txt 653 510

    D'avance merci de votre aide

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Regarde du côté du read line pour parcourir ton fichier

    Ensuite tu peux faire un sed -e "s/string1/string2/g" de ta ligne pour remplacer les ; par ta nouvelle chaine

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut
    et si je remplace les ; par autre chose....ca marche si je met \n pour aller a la ligne?
    Je suis plus que newbee en bash..
    Merci

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Oui ça créer un retour à la ligne , par contre je ne connais pas trop la commande awk mais si ton fichier est formaté , cela peux être intéressant

    http://www.funix.org/fr/unix/awk.htm

    Pour savoir si une chaine est présente dans ta ligne tu peux passer par la commande grep

    echo "$line" | grep -qF string_a_chercher il te renverra une chaîne nulle s'il n'a pas trouvé d'occurrence

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    pour chaque itération entre 000000002 LDR L -----nam-- et 000000009 FMT L BK
    je ferai une boucle du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ciff=$(cat t | cut -d"a" -f1)
    #gestion d'entete 
    for i in $(cat t) ; do echo $i ; done | sed "s/;//g;1,4d;s/.*/$chifa&/g"  
    000000009 653   L$$aURANIUM
    000000009 653   L$$aORES
    000000009 653   L$$aSPAIN
    000000009 653   L$$aENVIRONMENT
    000000009 653   L$$aHYDROMETALLURGY
    #gestion de bas d'iteration
    après pour faire plus précis il faudrait un exemple réel d'au moins 2 blocks de données.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    et voici le fichier:

    000000510 LDR L -----nam--2200385Ia-45e0
    000000510 00810 L 0211s9999 xx 000 0 und d
    000000510 020 L $$a84-500-3320-9
    000000510 022 L $$a0081-3397
    000000510 041 L $$aINGLES
    000000510 042 L $$a1
    000000510 088 L $$aJ.E.N. 454
    000000510 090 L $$aINFORMES JEN
    000000510 245 L $$aSTATUS RODS
    000000510 250 L $$a1 ED
    000000510 260 L $$aMADRID $$b JUNTA DE ENERGIA NUCLEAR$$c1979
    000000510 300 L $$a77 P. 11 FIGS.
    000000510 340 L $$aPAPEL
    000000510 440 L $$aINFORMES TECNICOS J.E.N.
    000000510 500 L $$aFIGURA EN PORTADA EL CENTRO DE TRABAJO DE CADA AUTOR
    000000510 505 L $$aINFORME SOBRE EL SIMINARIO CELEBRADO
    000000510 590 L $$aINFORME
    000000510 650 L $$a220300
    000000510 653 L $$aBARRAS DE COMBUSTIBLE;IRRADIACION;REACTOR FR-2;REACTORES DE NEUTRONES RAPIDOS
    000000510 653 L $$aFUEL RODS;IRRADIATION;FR-2 REACTOR;FAST REACTORS
    000000510 700 L $$aBOJAR, K.
    000000510 700 L $$aELB, H.
    000000510 700 L $$aKUMM, K.
    000000510 700 L $$aLOPNEZ, J.
    000000510 700 L $$aOTEGANDARA, J.L.
    000000510 700 L $$aOTENDARA, J.L.$$cCIEMAT
    000000510 710 L $$aJUNNUCLEAR;JEN
    000000510 852 L $$aCEN Y BIBLIOTECA CENTRAL
    000000510 856 L $$ahttentales/biblioteca_central/343_IJ0454.pdf'
    000000510 901 L $$aJUNUCLEAR (J.E.N.)
    000000510 902 L $$a23/06/89
    000000510 FMT L BK
    000000511 LDR L -----nam--2200313Ia-45e0
    000000511 00810 L 0211s9999 xx 000 0 und d
    000000511 022 L $$a0081-3397
    000000511 041 L $$aINGLES
    000000511 042 L $$a1
    000000511 088 L $$aJ.E.N. 379
    000000511 090 L $$aINFORMES JEN
    000000511 245 L $$aINEPERIODIC SOLUTIONS, NON-PERIODIC ATTRACTORS, AND RELATED CONVECTIVE AND OTHERWISE NON-LINEAR PHENOMENA
    000000511 250 L $$a1 ED
    000000511 260 L $$aMADRID $$b JUNTA DE ENERGIA NUCLEAR$$c1977
    000000511 300 L $$a144 P. 9 FIGS. 105 REFS.
    000000511 340 L $$aPAPEL
    000000511 440 L $$aINFORMES TECNICOS J.E.N.
    000000511 505 L $$aEN EEPENDEINTES DEL TIEMPO (TALES COMO LAS OSCILACIONES DE RELAJACION)Y ASIMISMO SE LA TRANSICION A LA TURBULENCIA. TAMBIEN SE ESTUDIAN LAS SOLUCIONES ESTACIONARIAS, CICLOS LIMITES Y ESTRUCTURAS ESPECIALES INHOMOGENEAS(ORDENEDAS:ESTRUCTURAS DISIPATIVAS)EN SISTEMAS SENCILLOS DE REACCION-DIFUSION.POR ULTIMO, SE CONSTRUYE EL ATRACTOR NO PERIODICO(O ANOMALO) QUE APARECE PARA ALTOS NUMEROS DE RAYLEIGH EN EL MODELO DE LORENZ DE ECUACIONES DE BOUSSINESQ-OBERBECK TRUNCADAS Y SE DISCUTEN ASIMIMO EL FENOMENO DE LA TURBULENCIA.
    000000511 590 L $$aINFORME
    000000511 650 L $$a660000
    000000511 653 L $$aCONVECTIVE INSTABILITIES;LYAPUNOV METHOD;CHEMICAL REACTION KINETICS;LANDAU FLUCTUATIONS ;HYDRODYNAMICS;NONLINEAR PROBLEMS
    000000511 653 L $$aINESTABILIDADES CONVECTIVAS; CINETICA DE LAS REACCIONES QUIMICAS; HIDRODINAMICA; PROBLEMAS NO LINEALES
    000000511 700 L $$aGARCARDE, M.
    000000511 700 L $$aGARCDE, M.$$cCIEMAT
    000000511 710 L $$aJUNTA DE ENERGIA NUCLEAR;JEN
    000000511 852 L $$aCENTENTACION Y BIBLIOTECA CENTRAL
    000000511 856 L $$ahttps/biblioteca_central/413_IJ0379.pdf'
    000000511 901 L $$aJUNTA DE ENERGIA NUCLEAR (J.E.N.)
    000000511 902 L $$a12/07/89
    000000511 FMT L BK
    000000512 LDR L -----nam--2200337Ia-45e0
    000000512 00810 L 0211s9999 xx 000 0 und d
    000000512 022 L $$a0081-3397
    000000512 041 L $$aESPAÑOL
    000000512 042 L $$a1
    000000512 088 L $$aJ.E.N. 376
    000000512 090 L $$aINFORMES JEN
    000000512 245 L $$aRECINTO PARA LA MANIPULACION DE MATERIALES DE ELEVADA ACTIVIDAD
    000000512 250 L $$a1 ED
    000000512 260 L $$aMADRID $$b JUNTA DE ENERGIA NUCLEAR$$c1977
    000000512 300 L $$a17 P. 5 FIG.
    000000512 340 L $$aPAPEL
    000000512 440 L $$aINFORMES TECNICOS J.E.N.
    000000512 505 L $$aUNO AJE Y PUESTA A PUNTO, DE RECINTOS ADECUADOS PARA EL PROCESAMIENTO SIN RIESGO DE LOS PRODUCTOS ACTIVOS. DENTRO DE ESTA LINEA SE HA ESTUDIADO Y CONSTRUIDO UN NUEVO RECINTO PARA LA MANIPULACION DE CANTIDADES ELEVADAS DE ACTIVIDAD, BLINDADO CON UNA PARED DE PLOMO DE 150MM DE ESPESOR. EN ESTA PUBLICACION SE DETALLAN NUMEROSOS ASPECOS QUE PUEDEN INTERESAR A LAS PERSONAS QUE TRABAJAN EN ESTE CAMPO.
    000000512 590 L $$aINFORME
    000000512 650 L $$a52000
    000000512 653 L $$aHOT CELLS;MATERIALS HANDLING;RADIOACTIVE MATERIALS;SHIELDING;LEAD;THICKNESS;RADIATION PROTECTION
    000000512 653 L $$aMATERIALES RADIACTIVOS; PLOMO; CELDAS CALIENTES; BLINDAJES; PROTECCION CONTRA LAS RADIACIONES
    000000512 700 L $$aCASTDE LA
    000000512 700 L $$aDOMIIGUEZ, G.
    000000512 700 L $$aJIMEOSSO, F.
    000000512 700 L $$aJIMEO, F.$$cCIEMAT
    000000512 710 L $$aJUNTA DE ENERGIA NUCLEAR;JEN
    000000512 852 L $$aCENTRO DE DOCUMENTACION Y BIBLIOTECA CENTRAL
    000000512 856 L $$ahttp://www2.ciemat.es/documentales/biblioteca_central/415_IJ0376.pdf'
    000000512 901 L $$aJUNTA DE ENERGIA NUCLEAR (J.E.N.)
    000000512 902 L $$a13/07/89
    000000512 FMT L BK

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    while read -r line
    do prefix=$(sed 's/\(.*[[:lower:]]\).*/\1/' <<<"$line")
       (
        IFS=';'
        set - $line
        echo "$1"
        shift
        [ -n "$1" ] && for y; do echo -e "${prefix}${y# *}"; done
        )
    done < input_file
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut
    mon dieux que c'est beau !!! MERCI...ca marche carement bien.
    Bravo et merci encore
    Bon Week

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

Discussions similaires

  1. decouper String separateur "/"
    Par FrenchyBoss dans le forum Langage
    Réponses: 21
    Dernier message: 13/05/2013, 20h03
  2. decouper un string a gauche et a droite
    Par ldiaz dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/04/2012, 17h04
  3. Réponses: 6
    Dernier message: 07/09/2009, 13h00
  4. [decouper une string]
    Par meufeu dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/10/2004, 17h11
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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