Utiliser une commande awk dans awk

Résolu
th.deudon Messages postés 449 Statut Membre -  
th.deudon Messages postés 449 Statut Membre -
Bonjour à tous,

J'ai un fichier ( fichier1 ) qui pour chaque ligne, a un lien vers un fichier ( exemple : .//abcd/efg/helico.xml ) , le nombre de ligne est aléatoire et le lien l'est aussi.
(représentation de fichier1 :
.//abcd/efg/helico.xml
.//abcd/efg/avion.xml
.//abcd/efg/voiture.xml
.//abcd/efg/train.xml)

Mon but : récupérer des données de chaque fichier dont les liens sont présents.
Je sais récuperer ces données avec une fonction awk :
awk ' { fonction } ' fichier.xml 

Cette fonction me donne les données voulues pour le fichier.xml, mais je les veux toutes, du coup j'ai eu l'idée de faire une variable qui aurait une action :
action=$ (awk ' { fonction } ' ... )

puis de faire :
awk ' {action($0) } ' fichier1 > fichier2


Problème :
je ne sais pas quoi mettre a la place de ... , j'ai essayé PARAM_VAR , mais je reçois "cannot open PARAM_VAR (No such file or directory)"
sinon, est ce la bonne écriture pour utiliser cette action?

Merci

2 réponses

Résumé de la discussion

Le problème porte sur un fichier référençant des liens vers d'autres fichiers et sur la récupération des données présentes dans chacun via une fonction awk.
Plusieurs réponses proposent de lire les liens depuis fichier1 et d'exécuter sur chaque fichier référencé une commande awk, le code étant stocké dans une variable et appelé comme action.
Des pistes techniques évoquées incluent getline dans BEGIN pour boucler sur fichier1, l'extraction de NF-1 pour le chemin, et la gestion appropriée des variables et des résultats.
En pratique, des alternatives comme un fichier trajectoire de liens ou une boucle for pour traiter les fichiers un par un sont évoquées, sans trancher sur une solution unique.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Utilisateur anonyme
     
    awk 'BEGIN{while(getline<"fichier1" >0)ARGV[++n]=$0; ARGC+=n}{print "traitement du fichier : "FILENAME", ligne "FNR" : "$0}'
    1
    1. th.deudon Messages postés 449 Statut Membre 16
       
      Alors merci, mais je n'ai pas compris ce que tu as fait, et je ne vois pas ou la fonction pour récupérer mes données agit... je test ca de suite

      EDIT : alors deja il aime pas le fait qu'on lui dise pas quoi on traite ( apres le dernier ' )
      et du coup j'ai rien en sortie
      0
    2. Utilisateur anonyme
       
      il aime pas le fait qu'on lui dise pas quoi on traite
      en fait, on le lui dit; c'est à ça que sert ARGV.

      comment est généré le fichier1 ?
      les fichiers qui y sont listés existent-ils ?
      0
    3. th.deudon Messages postés 449 Statut Membre 16
       
      oui, quand je fais un programme awk avec un des fichier listé, j'ai ce que je veux
      0
    4. th.deudon Messages postés 449 Statut Membre 16
       
      ok, j'avais mal vu un (), je les avais mis en {}

      alors ok, j'ai l'impression que ca me lit tout, mais comment je fais l'action voulue ( récupérer les données ) , car la j'ai 10000000000 de données pour 3 intéressantes ;)
      0
    5. Utilisateur anonyme
       
      tu remplaces le print par le traitement souhaité !
      0
  2. Utilisateur anonyme
     
    salut,

    un mot = une notion

    un fichier, c'est un fichier.
    un répertoire, c'est un répertoire.
    un lien, c'est un lien vers un fichier.

    sois plus rigoureux dans ton exposé, stp.
    0
    1. th.deudon Messages postés 449 Statut Membre 16
       
      je pense que c'est bon, je confonds souvent fichier et dossier, désolé
      0
    2. th.deudon Messages postés 449 Statut Membre 16
       
      J'ai un fichier ( fichier1 ) qui pour chaque ligne, a un lien vers un fichier ( exemple : .//abcd/efg/helico.xml ) , le nombre de ligne est aléatoire et le lien l'est aussi.
      (représentation de fichier1 :
      .//abcd/efg/helico.xml
      .//abcd/efg/avion.xml
      .//abcd/efg/voiture.xml
      .//abcd/efg/train.xml)

      Mon but : récupérer des données de chaque fichier dont les liens sont présents.
      Je sais récuperer ces données avec une fonction awk :

      awk ' { fonction } ' fichier.xml


      Cette fonction me donne les données voulues pour le fichier.xml, mais je les veux toutes, du coup j'ai eu l'idée de faire une variable/fonction qui aurait une action :

      action=$ (awk ' { fonction } ' ... )


      puis de faire :

      awk ' {action($0) } ' fichier1 > fichier2



      Problème :
      je ne sais pas quoi mettre a la place de ... , j'ai essayé PARAM_VAR , mais je reçois "cannot open PARAM_VAR (No such file or directory)"
      sinon, est ce la bonne écriture pour utiliser cette action?
      0