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 :

[AWK] Supprimer une colonne du milieu


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut [AWK] Supprimer une colonne du milieu
    Bonjour,

    J'ai un document qui contient environ 30000 lignes qui a cette structure:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO `versets` VALUES ('01O', 1, 1, 125, 'Au commencement, Dieu créa les cieux et la terre.\n', 'Au commencement Dieu créa les cieux et la terre.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 2, 758, 'La terre était informe et vide: il y avait des ténèbres à la surface de l`abîme, et l`esprit de Dieu se mouvait au-dessus des eaux.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 3, 1289, 'Dieu dit: Que la lumière soit! Et la lumière fut.\n', 'Et Dieu dit: Que la lumière soit! Et la lumière fut.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 4, 783, 'Dieu vit que la lumière était bonne; et Dieu sépara la lumière d`avec les ténèbres.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 5, 45, 'Dieu appela la lumière jour, et il appela les ténèbres nuit. Ainsi, il y eut un soir, et il y eut un matin: ce fut le premier jour.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 6, 9, 'Dieu dit: Qu`il y ait une étendue entre les eaux, et qu`elle sépare les eaux d`avec les eaux.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 7, 79, 'Et Dieu fit l`étendue, et il sépara les eaux qui sont au-dessous de l`étendue d`avec les eaux qui sont au-dessus de l`étendue. Et cela fut ainsi.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 8, 42, 'Dieu appela l`étendue ciel. Ainsi, il y eut un soir, et il y eut un matin: ce fut le second jour.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 9, 159750, 'Dieu dit: Que les eaux qui sont au-dessous du ciel se rassemblent en un seul lieu, et que le sec paraisse. Et cela fut ainsi.\n',0);


    Ce que je voudrais faire c'est supprimer le 8eme champ et garder le reste de la ligne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO `versets` VALUES ('01O', 1, 1, 'Au commencement, Dieu créa les cieux et la terre.\n', 'Au commencement Dieu créa les cieux et la terre.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 2, 'La terre était informe et vide: il y avait des ténèbres à la surface de l`abîme, et l`esprit de Dieu se mouvait au-dessus des eaux.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 3, 'Dieu dit: Que la lumière soit! Et la lumière fut.\n', 'Et Dieu dit: Que la lumière soit! Et la lumière fut.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 4, 'Dieu vit que la lumière était bonne; et Dieu sépara la lumière d`avec les ténèbres.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 5, 'Dieu appela la lumière jour, et il appela les ténèbres nuit. Ainsi, il y eut un soir, et il y eut un matin: ce fut le premier jour.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 6, 'Dieu dit: Qu`il y ait une étendue entre les eaux, et qu`elle sépare les eaux d`avec les eaux.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 7, 'Et Dieu fit l`étendue, et il sépara les eaux qui sont au-dessous de l`étendue d`avec les eaux qui sont au-dessus de l`étendue. Et cela fut ainsi.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 8, 'Dieu appela l`étendue ciel. Ainsi, il y eut un soir, et il y eut un matin: ce fut le second jour.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 9, 'Dieu dit: Que les eaux qui sont au-dessous du ciel se rassemblent en un seul lieu, et que le sec paraisse. Et cela fut ainsi.\n',0);

    pour ce faire j'ai essayé avec awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print $1,$2,$3,$4,$5,$6,$7,$9}' momFichier.txt


    le résultat n'est pas exactement ce que j'espérais car je n'ai que le premier mot.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO `versets` VALUES ('01O', 1, 1, 'Au
    INSERT INTO `versets` VALUES ('01O', 1, 2, 'La
    etc...

    La question est : comment faire pour garder le reste de la phrase dans une variable ? ou si vous avez une autre solution.

    Merci

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

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

    donne à awk la virgule comme séparateur de champs.

    --
    Gawk User's Guide
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~/t[xxx]:cat toto
    INSERT INTO `versets` VALUES ('01O', 1, 1, 125, 'Au commencement, Dieu créa les cieux et la terre.\n', 'Au commencement Dieu créa les cieux et la terre.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 2, 758, 'La terre était informe et vide: il y avait des ténèbres à la surface de l`abîme, et l`esprit de Dieu se mouvait au-dessus des eaux.\n',0);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~/t[xxx]:awk -F , '{for (i=1; i <= NF; i++) {if (i != 4 && i != NF) printf("%s,", $i); if (i == NF) printf("%s\n", $i)}}' toto 
    INSERT INTO `versets` VALUES ('01O', 1, 1, 'Au commencement, Dieu créa les cieux et la terre.\n', 'Au commencement Dieu créa les cieux et la terre.\n',0);
    INSERT INTO `versets` VALUES ('01O', 1, 2, 'La terre était informe et vide: il y avait des ténèbres à la surface de l`abîme, et l`esprit de Dieu se mouvait au-dessus des eaux.\n',0);
    ~/t[xxx]:

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Citation Envoyé par N_BaH
    donne à awk la virgule comme séparateur de champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{$8=""; $1=$1; print}' fichier
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{$8=""; $1=$1; print}' fichier
    Si un espace malencontreux se glisse avant le champ $8 celà ne marche pas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour N_BaH et merci

    C'est exactement ce que j'avais besoin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{$8=""; $1=$1; print}' fichier
    Encore un grand merci

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par noooop Voir le message
    Si un espace malencontreux se glisse avant le champ $8 celà ne marche pas
    Pourquoi ? awk considère une suite d'espaces comme un seul séparateur, non ?

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par noooop Voir le message
    Si un espace malencontreux se glisse avant le champ $8 celà ne marche pas
    Si tu veux mais pour awk, le champs 8 sera toujours le champs 8. Si le fichier est corrompu ou ne corresponds pas à l'exemple donné par duchmul, une solution plus adaptée s'imposerait.

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{$8=""; $1=$1; print}' fichier
    On peut faire plus court :

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

Discussions similaires

  1. [Oracle 7.3.4]Supprimer une colonne d'une table
    Par soazig dans le forum Oracle
    Réponses: 6
    Dernier message: 23/02/2006, 19h24
  2. [excel]comment supprimer une colonne vide...
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/10/2005, 13h10
  3. Supprimer une colonne SQLServer 6.5
    Par Mr N. dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/09/2004, 17h16
  4. Instruction SQL qui supprime une colonne d'une table
    Par tseg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2003, 20h47
  5. Supprimer une colonne sous SQL Serveur 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/07/2003, 12h24

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