2010-09-10 25 views
7

J'essaie de créer un script AWK qui va filtrer le fichier d'entrée en fonction d'un motif, et utiliser la fonction strftime() pour certains calculs.Utilisation de la fonction strftime dans mawk

($2 ~ /^[HB]/ && $2 ~ /n$/){ 
     print strftime("%Y") 
} 

L'interpréteur utilisé est mawk. Lorsque le déclenchement de ce script en utilisant cette commande:

awk -f script3 inputFile 

Je reçois l'erreur: « fonction strftime jamais été défini »

Répondre

3

Eh bien, clairement, mawk ne dispose pas d'une fonction strftime.

Je n'ai pas mawk ici, donc non testé:

awk -f script -v the_year=$(date "+%Y") inputFile 

et script a (combinant les deux expressions régulières:

$2 ~ /^[HB].*n$/ { print the_year } 

Si l'année devrait venir de 0 $ en quelque sorte, vous Donner plus de détails sur votre saisie

EDIT

the input is made of several rows that look like this: "12768 Ashwari F 20 11 1985". Basically I have to filter all those with a name that begins with B or H and ends with n. In addition I have to calculate the age of each filtered student and find out the average age of the entire group.

awk -v this_year=$(date +%Y) -v today=$(date +%Y%m%d) ' 
    $2 ~ /^[BH].*n$/ { 
     age = this_year - $6 
     if (today < $6 $5 $4) { age-- } # I assume those fields are the birthday 
     total_age += age 
     count ++ 
     print $2 " is " age " years old" 
    } 
    END { 
     print "average age = " total_age/count 
    } 
' inputFile 
+0

Salut Glenn, l'entrée est composée de plusieurs lignes qui ressemblent à ceci: "12768 Ashwari F 20 11 1985". Fondamentalement, je dois filtrer tous ceux avec un nom qui commence par 'B' ou' H' et se termine par 'n'. De plus, je dois calculer l'âge de chaque étudiant filtré et déterminer l'âge moyen de l'ensemble du groupe. À la vôtre, Ariel. –

+0

C'est une bonne idée et fonctionne dans certains cas. Mais parfois, vous devez répéter l'appel de l'horodatage, par exemple pour les messages de journal, et dans ce cas, cela n'aide pas. – erikbwork

12

Installation GAWK vous obtiendrez la fonction strftime arrière qui vous manque en mode natif dans awk.

Avec Ubuntu 11.10 ou la distribution simiar vous publierait commande suivante pour obtenir le GAWK

sudo apt-get install gawk

Vous pouvez également l'utiliser dans gawk mais vous n'avez pas et peut tout simplement aller de l'avant avec l'original script awk.

+0

J'ai fait le travail le pour moi. Merci – codersofthedark

+1

@Ariel: S'il vous plaît marquer comme réponse correcte si cela a fonctionné pour vous aussi – codersofthedark