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 :

Supprimer n lignes d'un fichier.txt et les renvoyer dans un autre fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut Supprimer n lignes d'un fichier.txt et les renvoyer dans un autre fichier
    Bonsoir tus le monde,

    ce que je veux faire est assez simple sauf que que j'arrive pas a trouver la bonne combinaison de commandes shell pour le faire. Au fait j'ai un fichiers enorme et je voudrai supprimer les 1000 premières et les renvoyer dans un autre fichier.
    j'ai essayé avec sed '1,1000' fichier.txt >out.txt mais je remarque que "fichier" a toujours les lignes effacées et que "out" ne contient pas les lignes effacées mais celles qui restent de "fichiers" après la suppresion .
    comment faire??
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    head -1000 fichier.txt > out.txt
    nb_ligne=$(wc -l fichier.txt | cut -d" " -f1)
    tail -$(($nb_ligne-1000)) fichier.txt > nouveau_fichier.txt

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Bonjour,
    En plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ head -1000 fichier.txt > out.txt
    $ head -n -1000 fichier.txt > nouveau_fichier.txt
    $ wc -l fichier.txt nouveau_fichier.txt out.txt
       9405 fichier.txt
       8405 nouveau_fichier.txt
       1000 out.txt
      18810 total
    Version sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ wc -l fichier.txt
    9405 fichier.txt
    $ sed -n -e '1,1000p' fichier.txt >out.txt
    $ sed -i -e '1,1000d' fichier.txt
    $ wc -l fichier.txt out.txt
       8405 fichier.txt
       1000 out.txt
       9405 total

  4. #4
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Merci pour toutes vos réponses je ne serai jamais arrivée à deviner ça toute seule. J'ai fait toutes fois quelques modifications sur la deuxième commande voici le script complet

    head -10 fichier > out les 10 premières lignes sont renvoyée dans out
    tail -n +11 fichier > intermediaire intermediaire contient les lignes de fichier sauf les 10 premières
    rm fichier fichier est supprimé
    mv intermediaire fichier intermediaire est renommé en fichier

    j'ai cependant une autre question: comment je fait pour que "fichier" et "out" soient des variables de sorte que a chaque fois que j'exécute mon script je peux les changer en fonction de mes besoins????

    merci

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Ben tu remplaces les noms des fichiers concernés par des variables, j'ai du mal à voir ce qui te pose problème la dedans

  6. #6
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Oui c'est vrai j'avais trouvé juste après avoir posté désolé c'était un peu bête merci beaucoup et bonne journée. Si quelqu'un pourrait marquer résolu ça sera gentil.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Exact, je devais être fatigué quand j'ai répondu:

    ceci est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    head -n -1000 fichier.txt > nouveau_fichier.txt

    mais je vois que tu as corrigé de toi-même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail -n +11 fichier > intermediaire
    Par contre, si c'est vraiment des très gros fichiers, je te conseille la version sed avec la variante suivante qui devrait être plus rapide que tail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed -n -e '1,1000p;1001q' fichier.txt >out.txt
    $ sed -i -e '1,1000d;1001q' fichier.txt
    Ici, on ne traite que les 1000 premières lignes du fichier pour chaque commande et on sort à la 1001 ème ligne.
    Tandis que pour la version tail, on traverse tout le fichier.

    Sinon, quand tu passes des arguments à un script shell, comme par exemple:
    dans le script lui-même, la valeur toto se trouve dans $1 et la valeur tata se trouve dans $2.
    exemple:
    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
    $ cat script.sh
    #!/bin/sh
     
    if [ "$#" -ne "2" ]
    then
            echo "USAGE:$0 prend 2 paramêtres"
            exit 1
    fi
    echo "la valeur de \$1 est: $1"
    echo "la valeur de \$2 est: $2"
     
    $ ./script.sh
    USAGE:./script.sh prend 2 paramêtres
    $ ./script.sh toto tata
    la valeur de $1 est: toto
    la valeur de $2 est: tata
    $ ./script.sh toto tata titi
    USAGE:./script.sh prend 2 paramêtres

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'oublie toujours le "tail -n" quand j'en aurais besoin...
    En tout cas c'est vrai que la méthode avec sed est préférable. Plis rapide et en plus tu ne passes pas par un fichier temporaire.

Discussions similaires

  1. Récuperer les données d'un fichier txt pour les insérer dans une Table
    Par sandokhane dans le forum Bases de données
    Réponses: 47
    Dernier message: 31/05/2014, 15h10
  2. Réponses: 6
    Dernier message: 17/02/2014, 11h14
  3. [XL-2007] Extraire des lignes en fonction d'une valeur de cellule dans un autre fichier
    Par MisterTambo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 10h42
  4. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 10h52
  5. Indexer un fichier txt dans un autre fichier txt
    Par dimitri1233 dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2006, 16h06

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