Besoin d'aide sur AWK

Résolu
th.deudon Messages postés 449 Statut Membre -  
th.deudon Messages postés 449 Statut Membre -
Bonjour, je dois faire un programme en AWK et j'ai quelques questions.

Peut on faire plusieurs FS?
Comment créer un dossier avec une valeur du texte
( exemple : dossier originel 1 2 3 4
dossier final j'ai mangé 4 pommes ( avec 4 car $4 ) )?
Comment avoir le nombre de lignes du dossier dans BEGIN?

Merci beaucoup pour vos réponses,
Si besoin de précisions sur les conditions, demandez

43 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

Plusieurs questions portent sur AWK, notamment comment définir plusieurs séparateurs de champs, créer des dossiers ou fichiers à partir de valeurs extraites du texte et obtenir le nombre de lignes en BEGIN. Plusieurs réponses décrivent des approches pratiques: rediriger la sortie vers des fichiers ou dossiers avec des chemins issus de colonnes, maintenir des variables hors de la boucle et gérer des sorties liées aux données. D'autres échanges soulignent des difficultés comme l'usage de contenu aléatoire dans A, B, C, D, l'ouverture de dossiers mentionnés dans des scripts et les méthodes pour compter les lignes avec getline ou NR.

Bobot (l'IA à votre service)
  1. th.deudon Messages postés 449 Statut Membre 16
     
    J'ai une autre question, imaginons qu'on a deux fichiers,
    fichier 1 avec 3 colonnes du style
    A A1 A2
    B B1 B2
    etc et qu'on ai un autre fichier du style
    (ce qu'on veut)A1(ce qu'on veut) appellons le A3
    (ce qu'on veut)B1(ce qu'on veut) lui B3
    (ce qu'on veut)B2(ce qu'on veut) lui B4
    (ce qu'on veut)A2(ce qu'on veut) lui A4
    je sais ou sont placés A1, A2 etc et je voudrais pouvoir faire ca
    A A1 A2 A3 A4
    B B1 B2 B3 B4
    sachant que le deuxieme fichier est presque aleatoire, et n'a pas forcement un 3 ou un 4 par lettre...
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    plusieurs FS : -F "fs1|fs2|fs3"

    nombre de lignes dans BEGIN : awk 'BEGIN{while(getline); print NR}' fichier

    qu'est ce qui sépare les colonnes du 2ème fichier, des espaces ?
    0
  3. th.deudon Messages postés 449 Statut Membre 16
     
    Premierement, merci pour ta reponse ,
    alors non, enfait ce sont des lignes genre
    1
    2
    3
    4
    5
    et je veux mettre telle avec telle car telle mais elle ne sont pas forcement alignées ( car aleatoirement mises )

    Deplus, sais tu comment ouvrir des dossiers mentionner dans un dossier.sh?
    0
  4. th.deudon Messages postés 449 Statut Membre 16
     
    Autre question, imagions que j'ai une variable A, je voudrais y rajouter chaque premier terme de chaque ligne d'un dossier, j'ai fait :
    awk -v var=$var ' { var += $1 } ' fichier.sh
    Mais sans succes :/
    et créer un dossier a partir d'une variable

    EDIT : Sinon il faudrait concatener plusieurs fichiers avec deux facons differentes :
    Ligne 1 avec Ligne 1
    Expression recurrente prédefini (par un terme d'une ligne ( que je peux mettre en $1 si il faut )) avec la meme expression recurrente ( je pense qu'il faut utiliser un if, mais j'ai l'impression que l'utilisation du /$1/ ne sera pas de mise :/
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour les A1 A2, je regarde.

    Deplus, sais tu comment ouvrir des dossiers mentionner dans un dossier.sh?
    avec awk ? comme ça :awk '...' fichier1 fichier2 etc

    pour l'adition, c'est correct mais il faut afficher la variable
    $ var=3; cat a3
    10
    20
    30
    $ awk -v var=$var ' { var += $1; print var } ' a3
    13
    33
    63
    $ awk -v var=$var ' { var += $1 } END { print var } ' a3
    63
    $  
    0
  7. th.deudon Messages postés 449 Statut Membre 16
     
    merci mais en fait ce sont des caracteres..
    et a la base ma variable n'est rien du tout, en gros je veux faire une " phrase " avec mes $1 dans ma variable :)

    Pour les fichiers : en fait j'ai un dossierµ.sh avec des chemins de dossiers aleatoires, faudrait les ouvrir pour recuperer certaines infos.

    Sinon : merci pour ton aide et ton temps ;)
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour ajouter du texte à une variable : var=var " " $1
    0
  9. th.deudon Messages postés 449 Statut Membre 16
     
    je t'aime, ca marche parfaitement

    EDIT : PS les tableaux 2d sont impossibles en awk, meme pour toi? Car c'est plus propre, mais sinon je concatene comme demandé précédement
    car j'aimerai bien faire un tableau avec
    var1
    var2
    var3
    mais pour chaque var separer les caracteres par des cases ;)

    Sinon le coup des plusieurs FS j'ai pas reussi, je place le -F apres awk?
    je te montre ma synthaxe : awk -F ' BEGIN { FS = "x | y " } ....

    PS : Pourquoi mettre des $ avant tes awk, ca change un truc?
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    on peut simuler un tableau à N dimension avec : tableau[var1, var2, var3]="hello"
    0
  11. th.deudon Messages postés 449 Statut Membre 16
     
    mmmh, avec des variables qui sont des listes, j'avais vu ca.

    mais comment récupérer par exemple tableau[ i; j]?

    Alors je n'ai plus besoin d'avoir une concatenation par expression reguliere, j'ai contourné le probleme. mais si tu sais, je dis pas non.
    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    mais comment récupérer par exemple tableau[ i; j]?
    alors que tableau a 3 dimensions ?
    0
  13. th.deudon Messages postés 449 Statut Membre 16
     
    ? je n'ai pas compris,
    non en fait je voudrais récuperer le ieme terme de ma jeme variable mise dans mon tableau ;)

    EDIT : j'ai dit AWK mais je peux utiliser SED, BASH etc, en gros je suis sur un dossier.sh et je dois me debrouiller sans le reste
    0
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    non en fait je voudrais récuperer le ieme terme de ma jeme variable mise dans mon tableau ;)
    donne un exemple

    les fichiers, comme ça ?
    $ cat a1
    A A1 A2
    B B1 B2
    $ cat a2
    xx xx A1 xx appellons le A3
    xx xx B1 xx lui B3
    xx xx B2 xx lui B4
    xx xx A2 xx lui A4 
    $ awk 'ARGIND==1 {t[NR]=$0; a[$2]=b[$3]=NR; next} {n=0} a[$3] {n=a[$3]} b[$3] {n=b[$3]} n {t[n]=t[n] " " $NF} END{for(n in t)print t[n]}' a1 a2 
    A A1 A2 A3 A4
    B B1 B2 B3 B4
    $ 
    
    0
  15. th.deudon Messages postés 449 Statut Membre 16
     
    alors j'ai fait ce que t'as dis en remplacant a1 et a2 par le nom de mes dossier, et en ajoutant > a3 pour stocker ca dans un dossier, probleme, il est vide.. qu'ais je oublié.
    De plus je n'ai pas tout compris ^^
    0
  16. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    comment sont séparés les champs dans ton fichier? c'est pour ca que j'ai mis des xxx <espace> , $3 ne doit pas correspondre à A1
    0
  17. th.deudon Messages postés 449 Statut Membre 16
     
    ca depends, 2 fichiers a mettre ensemble n'ont qu'un seul caractere,
    les autres, par espaces
    0
  18. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    montre le format exact des fichiers
    0
  19. th.deudon Messages postés 449 Statut Membre 16
     
    malheuresement je peux pas pour deux raisons,
    l'ordinateur qui les a ne peux etre connecté a internet,
    je ne peux donner des informations a cause d'une charte sur la sécurité de defense ( en gros je suis dans une entreprise d'armement de defense )

    du coup je peux te donner uniquement avec des ABCD/.123 :/
    0
  20. th.deudon Messages postés 449 Statut Membre 16
     
    mais bon en gros ca donne :
    fichier 1
    A C E
    A D F
    B D G
    fichier 2
    .//blabla/blabla/E.xml
    .//blabla/blabla/F.xml
    .//blabla/blabla/G.xml
    fichier 3
    (rien)
    .//blibli/blibli/EF.xml
    (rien)

    EDIT
    mais les ABCDEF sont aléatoire ( blabla et blibli non ) et le fait qu'une ligne soit rempli ou non dans fichier 3 est aléatoire
    et le nombre de ligne l'est aussi
    Et le fait qu'il y ait plusieurs fois A ou D est un hasard, seul E,F,G sont different obligatoirement
    0
  21. th.deudon Messages postés 449 Statut Membre 16
     
    et dans ce cas il me faudrait un fichier avec
    A C E .//blabla/blabla/E.xml
    A D F .//blabla/blabla/F.xml .//blibli/blibli/E.xml
    B D F .//blabla/blabla/F.xml

    et apres, extraire les infos de .//blibli/blibli/E.xml pour les mettre a sa place

    1colonne : alliance
    2: type d'objet
    3 : nom de l'objet ( surnom )
    4: fichier contenant la localisation
    5: fichier contenant le parcours
    0
  • 1
  • 2
  • 3