Passage de variable awk et en les utilisant dans une expression régulière

Je suis en train d'apprendre awk et j'ai du mal à passer une variable dans le script ET de l'utiliser dans le cadre d'une regex modèle de recherche.

L'exemple est contraint, mais montre mon problème.

Mes données est la suivante:

Eddy        Smith       0600000000  1981-07-16    Los Angeles
Frank       Smith       0611111111  1947-04-29    Chicago           
Victoria    McSmith     0687654321  1982-12-16    Los Angeles
Barbara     Smithy      0633244321  1984-06-24    Boston            
Jane        McSmithy    0612345678  1947-01-15    Chicago               
Grace       Jones       0622222222  1985-10-07    Los Angeles
Bernard     Jones       0647658763  1988-01-01    New York          
George      Jonesy      0623428948  1983-01-01    New York          
Indiana     McJones     0698732298  1952-01-01    Miami             
Philip      McJonesy    0644238523  1954-01-01    Miami

Je veux un script awk que je peux passer une variable et ensuite le script awk faire une regex pour la variable.
J'ai ce script appelle maintenant "003_search_persons.awk".

#this awk script looks for a certain name, returns firstName, lastName and City

#print column headers
BEGIN {
    printf "firstName lastName City\n";
}

#look for the name, print firstName, lastName and City
$2 ~ name {
    printf $1 " " $2 " " $5 " " $6;
    printf "\n";
}

J'appelle le script comme ceci:

awk -f 003_search_persons.awk name=Smith 003_persons.txt

Il renvoie la suivante, ce qui est bon.

firstName lastName City
Eddy Smith Los Angeles
Frank Smith Chicago
Victoria McSmith Los Angeles
Barbara Smithy Boston
Jane McSmithy Chicago

Mais maintenant, je veux chercher un certain préfixe "Mc". Je pourrais bien sûr coder en dur, mais je veux un script awk qui est flexible. J'ai écrit ce qui suit dans 003_search_persons_prefix.awk.

#this awk script looks for a certain prefix to a name, returns firstName, lastName and City

#print column headers
BEGIN {
    printf "firstName lastName City\n";
}

#look for the prefix, print firstName, lastName and City
/^prefix/{
    printf $1 " " $2 " " $5 " " $6;
    printf "\n";
}

J'appelle le script comme ceci:

awk -f 003_search_persons_prefix.awk prefix=Mc 003_persons.txt

Mais maintenant il ne trouve pas les dossiers.

Le problème, c'est le modèle de recherche "/^préfixe/". Je sais que je peux remplacer ce modèle de recherche par un non-regex, comme dans le premier script, mais supposons que je veux le faire avec une regex, parce que j'ai besoin de le préfixe pour vraiment être au début du champ nom, comme il se doit, étant un préfixe et tous 😉

Comment puis-je faire cela?

  • nettoyage de l'allée 5: se débarrasser de tous les null consolidés (en ajoutant des points-virgules), changement printf "\n" pour imprimer simplement "", et changer printf $1 "" $2 etc. simplement print $1, $2, etc.
InformationsquelleAutor Niels Bom | 2010-02-09