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 :

KSH: Supprimer des lignes vides (sans espaces ni tab) en fin de fichier text


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut KSH: Supprimer des lignes vides (sans espaces ni tab) en fin de fichier text
    Bonjour,

    Je suis amené à manipuler un fichier KSH, malgré le fait que je n'aie reçu aucune formation dans ce domaine, peut-être quelqu'un pourrait m'aider?

    Un spool me crée un fichier texte comme suit:

    *debut de mon fichier texte*
    CHAINE 1
    CHAINE 2
    CHAINE 3


    *fin de mon fichier texte*

    Les deux dernières lignes du fichiers sont complètement vides (pas d'espaces ni de tab), il s'agit juste de retours chariots.

    Ensuite je fais un read de ce fichier, et selon la valeur de la ligne (j'utilise des if) je lance divers traitements. Sauf que lorsque il arrive à la ligne vide, j'ai ce message d'erreur:

    /batch/mon.ksh[120]: test: 0403-004 Specify a parameter with this command.

    J'ai pensé utiliser sed ou awk pour supprimer ces lignes, en vain.

    Voilà mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     sqlplus -s ${USRORA} << EOF >> ${sqlreport} @$REP_SQL/mon.sql $monfichiertexte
    EOF
     
    while read script
    do
     
       if [ $script = "CHAINE 1" ]
       then
          #MON TRAITEMENT ICI
       fi
    done < $monfichiertexte
    Help !! Merci !!

  2. #2
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    teste si la ligne n'est pas vide avant de tester l'egalité avec la chaine

    en bash ca serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ -n $script ]
    then
        suite du traitement avec les autres tests
    En revanche je dirais qu'il y a confusion entre le nom de la variable et l'utilisation que tu sembles en faire. Qu'est censé contenir la variable script?
    La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
    Donald E. Knuth

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    En mettant le if, j'ai la même erreur. Sauf qu'au lieu de l'avoir n fois (n tests sur la valeur de script), je l'ai une seule fois...

    Quant au nom de la variable, je suis totalement d'accord avec toi: ceux qui ont développé ce ksh étaient des boulets, et maintenant qu'ils ont quitté mon projet, je dois faire avec :s

    PI, script est un nom de table.

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Entourer $script de double-quotes doit régler le problème.
    En présence de ligne vide, sans ces double-quotes, le shell lit :

    et ne comprend pas alors qu'avec les double-quotes :

    il sera content

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       if [ "$script" = "CHAINE 1" ]
       then
          #MON TRAITEMENT ICI
       fi
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut hieroglyphe ;-)
    SED fait cela aussi très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e :a -e '/^\n*$/N;/\n$/ba' nom_du_fichier
    bon d'accord, les expressions régulières sont difficiles à lire mais...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Supprimer des lignes vides d'un CSV
    Par amine.h dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2010, 17h40
  2. [RegEx] Supprimer des lignes vides
    Par bigs3232 dans le forum Langage
    Réponses: 14
    Dernier message: 17/04/2010, 00h40
  3. Supprimer des lignes vides dans un label
    Par benjhe dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/12/2007, 08h57
  4. Supprimer des lignes vides
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/11/2007, 19h32
  5. supprimer des lignes vides
    Par Medmidou dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/10/2007, 13h51

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