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 :

Prog csh awk


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Prog csh awk
    Bonjour,

    je dois utiliser le csh et le awk pour travailler sur des fichiers, mais gros blocage

    Voici mon probleme :

    jai des fichiers, xxxx.aaa que je veux copier dans des fichiers yyyy.bbb
    et jai la correspondance entre ces fichiers dans un 3eme qui me sert de bibliotheque.
    Cette bibliotheque est en fait un fichier texte, avec sur la premiere colonne les yyyy avec sur une deuxieme colonne, les xxxx correspondant.

    lidee est :
    - Soit de tout faire en csh, mais je ne sais pas comment parcourir le fichier bibliotheque pour rentrer les yyyy et xxxx chacun dans une variable afin dutiliser la commande cp, puis de passer a la ligne suivante et de recommencer,
    - Soit douvrir le fichier bibliotheque en awk, qui sera facile de parcourir ($1, $2 ....), puis douvrir le fichier xxxx correspondant pour tout mettre dans le yyyy.


    Merci pour d'eventuels coup de main.

  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 Une solution avec cut
    Ya surement mieux avec awk en faisant une boucle sur $NR avec des {print $1} et {print $2} mais ça fait longtemps que j'ai pas fait de awk donc jrisque de dire des betises.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    EXT1=aaa
    EXT2=bbb
    cat $FICHIER3 | while read line
    do
        fichier1=$(echo $line | cut -d" " -f1)
        fichier2=$(echo $line | cut -d" " -f2)
        cp ${fichier1}.$EXT1 ${fichier2}.$EXT2
    done
    Moyennant le rajout eventuel du chemin vers les bons repertoires dans la commande cp

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci pour le coup de main, il reste juste un probleme encore,
    au lancement de lapplication il me fait cette erreur :

    while : Expression syntax

    jai essayer de mettre le read line entre parenthese ou crochet, même erreur.



    Peux tu egalement me dire la fonction du | entre le cat et le while ?

    merci

  4. #4
    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
    tu peux écrire exactement ce que tu as mis dans ton script?
    le | c'est un pipe ca consiste à envoyer la sortie de la commande précédente en entrée de la commande suivante. Donc la tu envoies l'ensemble des lignes de ton fichier a traiter en entrée de la boucle while qui va lire chaque ligne avec la commande read. while read line ça marche normalement tu as peut etre une erreur ailleurs

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    donc voila la totalite du script, ce que tu m'as donne se trouve dans la deuxieme partie (la fin en gros)


    #!/bin/csh

    set dir=/home/Data
    set fichier=($dir/*.a77)

    foreach FILE ($fichier)
    set profil=$FILE:r
    head -1 $FILE > $profil
    echo $profil

    awk -v nom=$profil -f biblio.awk $profil
    \rm $profil
    end

    set ext1=a77
    set ext2=dat
    set dir2=/home/Prog
    set fichier3=($dir2/biblio.dat)

    echo $fichier3
    cat $fichier3 | while read line
    do
    fichier1=$(echo $line | cut -d" " -f2)
    fichier2=$(echo $line | cut -d" " -f1)
    \cp ${fichier1}.$ext1 ${fichier2}.$ext2
    done



    La partie en awk permet d extraire le nom pour le fichier .dat, qui se trouve sur la premiere ligne, premier mot du fichier .a77, ainsi que de creer les fichiers .dat vide et le fichier biblio.dat, qui a les correspondances des noms entre le .a77 et le .dat

  6. #6
    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
    j'ai pas vérifié tout ton script mais jviens de me rendre compte que csh et bash n'avaient pas tout à fait la même syntaxe. Donc tu as le choix entre réécrire le début de ton script en bash ou réécrire ma partie en csh, ou la syntaxe du while est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (condition)
      instructions
    end
    De le même facon il faut changer les affectations en set fichier1=...
    Je ne sais pas non plus si la subsitution de commande $(...) fonctionne, si non utilise `...`
    Vérifie également pour les autres commandes que j'ai utilisées si elles existent bien en csh.
    T'es obligé d'utiliser csh comme shell?

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci je vais essayer de changer un peu le language.


    Non je n ai pas d obligation pour le language, mais je ne connais pas du tout, et javais des morceaux de programmes ecrit en csh, alors je me suis debrouille avec ce que javais, et jai continue en csh.

Discussions similaires

  1. programmation csh awk
    Par johnyluc dans le forum Linux
    Réponses: 0
    Dernier message: 09/07/2008, 17h13
  2. Csh, sort, awk
    Par Longrais dans le forum Linux
    Réponses: 2
    Dernier message: 26/08/2005, 13h17
  3. redémarrer un prog à partir d'un bouton
    Par yokito dans le forum Langage
    Réponses: 5
    Dernier message: 06/09/2002, 13h19
  4. Existe-t-il un langage de prog "virtuel" en Français
    Par HRS dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 10/06/2002, 18h11

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