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

Linux Discussion :

ajout ligne en queue d'un fichier sous UNIX


Sujet :

Linux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut ajout ligne en queue d'un fichier sous UNIX
    Bonjour,

    je cherche à ajouter une ligne en fin d'un fichier texte sous UNIX (en batch); cette ligne doit contenir un identifiant "FIN" suivi de "|" suivi du nombre de lignes du fichier, suivi de "|"
    Je sais que pour avoir le nombre de lignes il faut faire un wc -l nom_fichier.
    Cela me retournera 1000 si il y a 1000 lignes dans le fichier.
    Mais pour ajouter la dernière contenant : "ENT|1000|", comment faire de façon efficace ?

    Merci d'avance pour votre réponse.


  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Avez-vous essayé quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ENT|1000|..." >> monfichier

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut ajout ligne en queue d'un fichier UNIX
    Citation Envoyé par alain.couthures Voir le message
    Avez-vous essayé quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ENT|1000|..." >> monfichier
    oui, mais 1000 représentant le nombre de lignes du fichier, comment récupérer le résultat de la commande wc -l nom_fichier pour la mettre dans la commande echo que vous me proposez ?

    Merci d'avance.


  4. #4
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Là il faut utiliser les apostrophes inversées : `wc -l nom_fichier`

    Essayez-donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ENT|"`wc -l nom_fichier`"|..." >> nom_fichier

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Citation Envoyé par alain.couthures Voir le message
    Là il faut utiliser les apostrophes inversées : `wc -l nom_fichier`

    Essayez-donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ENT|"`wc -l nom_fichier`"|..." >> nom_fichier
    Merci beaucoup,

    J'ai essayé et cela donne un ajout d'une dernière ligne :
    ENT|1000 nom_fichier|

    c'est pas mal, mais je voudrais avoir
    ENT|1000|
    en effet quand je fais wc -l nom_fichier, cela donne
    1000 nom_fichier

    que faire ?

    Merci d'avance


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

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Citation Envoyé par Super_Didji Voir le message
    Merci beaucoup,

    J'ai essayé et cela donne un ajout d'une dernière ligne :
    ENT|1000 nom_fichier|

    c'est pas mal, mais je voudrais avoir
    ENT|1000|
    en effet quand je fais wc -l nom_fichier, cela donne
    1000 nom_fichier

    que faire ?

    Merci d'avance

    J'ai essayé ceci
    echo "ENT|"`wc -l nom_fichier | awk '{print $1}'`"|" >>nom_fichier
    et j'obtiens
    ENT|1000|

    cela a l'air bon, mais j'avoue ne pas comprendre ; pouvez vous m'éclairer ?

    merci


  7. #7
    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
    Par défaut
    Bonjour,

    Citation Envoyé par Super_Didji Voir le message
    echo "ENT|"`wc -l nom_fichier | awk '{print $1}'`"|" >>nom_fichier
    awk est une commande permettant de couper une chaine en fonction des "mots" qui la composent (il est possible de préciser quel est le séparateur, amis de base il s'agit des espaces).
    Ici, la chaine entière passée à awk est :
    1000 nom_fichier

    Il coupe sur l'espace, puis entre les accolades, on lui demande d'afficher le premier paramètre, qui se trouve ici être 1000.
    Enfin, le echo "....." affiche ce qui est entre les guillemets, et le >> redirige ce qui est avant (la sortie de echo ici) dans le fichier souhaité !
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,



    awk est une commande permettant de couper une chaine en fonction des "mots" qui la composent (il est possible de préciser quel est le séparateur, amis de base il s'agit des espaces).
    Ici, la chaine entière passée à awk est :
    1000 nom_fichier

    Il coupe sur l'espace, puis entre les accolades, on lui demande d'afficher le premier paramètre, qui se trouve ici être 1000.
    Enfin, le echo "....." affiche ce qui est entre les guillemets, et le >> redirige ce qui est avant (la sortie de echo ici) dans le fichier souhaité !

    Merci beaucoup pour vos explications.

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

Discussions similaires

  1. Ajout ligne aprés N°ligne précis dans fichier txt
    Par dubinc38 dans le forum VBScript
    Réponses: 12
    Dernier message: 24/02/2009, 09h09
  2. Verouillage fichier sous UNIX
    Par bigben99 dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2006, 15h07
  3. Notification de modification de fichier sous unix en java
    Par deomis dans le forum Général Java
    Réponses: 6
    Dernier message: 20/06/2006, 15h43
  4. Concaténation de fichiers sous UNIX?
    Par airmax77 dans le forum Linux
    Réponses: 4
    Dernier message: 27/01/2006, 17h23
  5. Réponses: 7
    Dernier message: 20/09/2005, 18h47

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