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 :

variable NR de AWK


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut variable NR de AWK
    Bonjour,

    J'essai de passer une variable au paramêtre NR de la commande AWK, mais je n'obtiens aucun résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i=2
    while [ "$i" -le "$NB_LIG"  ]
    do
    awk -F" " '(NR==$i) {print $1,$2,$3,$4,$5,$6,"NULL","NULL"}' test_g > fic_${liste[$i-1]}
    let i=i+1
    done
    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    NR est une variable spéciale en awk donc à proscrire.

    De plus pour passer une variable du shell à awk il faut utiliser l'option "-v".

    Par contre si tu veux récupérer en awk certaines lignes d'un fichier, il ya + simple que la combinaison d'une boucle en shell et du awk. Tu peux le faire en awk uniquement.

    Peux tu nous donner + de détails sur l'objectif du script ?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Merci,

    En fait, j'ai un fichier "test_g" qui a X lignes. Je ne prends pas en compte la première ligne.
    Ensuite je veux distribuer ligne par ligne le contenu (certains champs avec awk) du fichier dans d'autres fichiers.
    pour obtenir une ligne par fichiers créés

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jonathan1 Voir le message
    Merci,

    En fait, j'ai un fichier "test_g" qui a X lignes. Je ne prends pas en compte la première ligne.
    Soit tu t'arranges, via tail, pour créer une copie de ton fichier sans la première ligne et tu passes ce résultat à awk via pipe, soit tu programmes awk pour qu'il ne traite pas la première ligne avec un if (NR == 1) next

    Citation Envoyé par jonathan1 Voir le message
    Ensuite je veux distribuer ligne par ligne le contenu (certains champs avec awk) du fichier dans d'autres fichiers pour obtenir une ligne par fichiers créés
    Soit ton awk affiche le tout et tu le parses par un algo shell qui va dispatcher le tout sur les fichiers qui vont bien, soit ton awk s'occupera lui-même l'écriture des autres fichiers
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk '{if(NR != 1){print $1" "$2 > NR".list.txt" }  }'
    Ne pas prendre la première ligne du fichier.
    Puis pour chaque ligne du fichier, écrire la colonne 1 et la colonne 2 dans un fichier qui porte le nom : NR.list.txt avec NR est le numéro de ligne en cours.

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Merci pour vos réponses

    Ca m'a permis d'aller voir ailleurs. Voila ce que j'ai fait, ça me parait plus simple qu'un programme awk.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    i=1
    IFS=""
    while read LIGNE
    do
    	if [ "$i" -eq "1" ]
    	then
    	else
    	echo $LIGNE > fic
    	awk -F" " '{print $1,$2,$3,$4,$5,$6,"NULL","NULL"}' fic > fic_${liste[$i-1]}
    	rm fic
    	fi
    let i=i+1
    done < test_g

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

Discussions similaires

  1. [Variables] Concaténation commande AWK
    Par amazigh42 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 27/04/2015, 11h06
  2. Remplacer un motif avec le contenu d'une variable via sed / awk
    Par deupac dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 18/03/2010, 20h30
  3. problème de variables avec script awk
    Par zcoul dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 19/02/2008, 14h16
  4. Réponses: 1
    Dernier message: 14/10/2007, 12h44
  5. récuperer dans une variable ce que AWK affiche
    Par Marcolinho dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/06/2007, 11h36

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