Go Back   Les systèmes UNIX et Linux Forums > Top Forums > UNIX pour les nuls Questions et réponses
.
Google Site



UNIX pour les nuls Questions et réponses Si vous ne savez pas où poster un UNIX ou Linux question, post it here. Tous les systèmes UNIX et Linux, débutants bienvenus!

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 10-05-2006
Registered User
 

Join Date: Sep 2006
Posts: 55
Impossible de comprendre la nature de awk associative arrays

À propos de nature associative de awk tableaux, je suis encore confus, pas encore en mesure de comprendre la façon dont l'élément de tableau peut être consulté sur la base d'un string, j'ai eu un exemple à gawk manuel associatif pour illustrer la nature des tableaux awk, il est ici:
Code
Code:
awk '
# Print list of word frequencies
{
    for (i = 1; i <= NF; i++)
        freq[$i]++
}

END {
    for (word in freq)
        printf "%s\t%d\n", word, freq[word]
}' test.txtIf

c'est le fichier d'entrée:
Code:
Kuwait  UAE     Qatar   KSA     Jordan
Lebanon Egypt   Syria   Kuwait  Qatar

Voici le résultat:
Code:
Syria   1
KSA     1
Lebanon 1
UAE     1
Qatar   2
Egypt   1
Jordan  1
Kuwait  2

Pouvez-vous svp expliquer le contenu de freq à chaque itération de la première règle, et aussi ce qui se passe à chaque itération de FIN règle? Ce serait une grande faveur.

Merci d'avance.

À la vôtre,
Un étudiant AWK
Liens Sponsorisés
  #2 (permalink)  
Old 10-05-2006
Registered User
 

Join Date: Sep 2006
Posts: 2604
Je tiens à expliquer, mais mon anglais n'est pas suffisant.
peut-être cet pourrait aider.
  #3 (permalink)  
Old 10-05-2006
tayyabq8's Avatar
Ex-Modérateur
 

Join Date: Nov 2004
Lieu: Bahreïn
Messages: 587
J'ai modifié le code pour illustrer le contenu de freq à chaque itération:
Code:
$cat freq.awk
#! /bin/ksh
awk '
# Print list of word frequencies
{
    for (i = 1; i <= NF; i++)
{
# Here loop variable i will contain values like 1, 2, 3 until last field of 
# Record which in your case is 5, so $i will behave like $1, $2, $3
# Following condition will lookup in array if key($i ie name of city in your case)
# Already exists in array or not

        if ( $i in freq )     
        print "Key(" $i "): is already there in array and its frequency or value is:  " freq[$i]

# In the 1st iteration of loop, $i($1) is equal to Kuwait, so freq[$i]
# Means freq[Kuwait], because you dont have any value associated to key Kuwait
# Therefor freq[$i] yeilds to zero and ++ operator increases it to 1

        freq[$i]++

# Print the record no., field no. value of key and freq associated to key, at each iteration of loop

        print "Record No." NR "\tField No: " i "\tValue of key: " $i "\tFrequency of word: " freq[$i]
}
print "\n"
}

END {
# Loop thru the whole array(freq) and find the associated value to each key
# Here word denotes key and freq[word] refres value associated to each key

    for (word in freq)
        printf "%s\t%d\n", word, freq[word]
}' abc.txt

Votre inputfile:
Code:
$cat abc.txt
Kuwait  UAE     Qatar   KSA     Jordan
Lebanon Egypt   Syria   Kuwait  Qatar

Exemple de sortie:
Code:
$./freq.awk
Record No.1     Field No: 1     Value of key: Kuwait    Frequency of word: 1
Record No.1     Field No: 2     Value of key: UAE       Frequency of word: 1
Record No.1     Field No: 3     Value of key: Qatar     Frequency of word: 1
Record No.1     Field No: 4     Value of key: KSA       Frequency of word: 1
Record No.1     Field No: 5     Value of key: Jordan    Frequency of word: 1


Record No.2     Field No: 1     Value of key: Lebanon   Frequency of word: 1
Record No.2     Field No: 2     Value of key: Egypt     Frequency of word: 1
Record No.2     Field No: 3     Value of key: Syria     Frequency of word: 1
Key(Kuwait): is already there in array and its frequency or value is:  1
Record No.2     Field No: 4     Value of key: Kuwait    Frequency of word: 2
Key(Qatar): is already there in array and its frequency or value is:  1
Record No.2     Field No: 5     Value of key: Qatar     Frequency of word: 2


Syria   1
KSA     1
Lebanon 1
UAE     1
Qatar   2
Egypt   1
Jordan  1
Kuwait  2

Observe,
Tayyab
  #4 (permalink)  
Old 10-07-2006
Registered User
 

Join Date: Sep 2006
Posts: 55
Shereenmotor, Merci beaucoup pour votre réponse détaillée.
Liens Sponsorisés
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Hors tension


Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
PERL: Comment puis-je imprimer une matrice associative? foo.bar De programmation et de script Shell 2 09-28-2007 10:06 AM
Associative Arrays sont possibles sous UNIX? Yongho UNIX pour les nuls Questions et réponses 11 07-11-2005 05:58 PM
Perl: Tri dans un tableau associatif tine De programmation et de script Shell 2 10-29-2003 04:11 AM
Associative Array tine De programmation et de script Shell 4 09-30-2003 10:27 AM



Toutes les heures sont au format GMT -4. Le temps est maintenant 03:56 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX et Linux Forums Copyright © 1993-2010. Tous droits Reserved.Ad Gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0