Estoy aprendiendo awk y tengo problemas para pasar una variable al script Y usarlo como parte de un patrón de búsqueda de expresiones regulares.Pasar variable a awk y usar eso en una expresión regular
El ejemplo está ideado pero muestra mi análisis.
Mis datos es el siguiente:
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
Quiero un script awk que puedo pasar una variable y luego tener la secuencia de comandos awk hacer una expresión regular para la variable. Tengo este script ahora llamado "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";
}
que llamo el script como el siguiente:
awk -f 003_search_persons.awk name=Smith 003_persons.txt
devuelve el siguiente, lo cual es bueno.
firstName lastName City
Eddy Smith Los Angeles
Frank Smith Chicago
Victoria McSmith Los Angeles
Barbara Smithy Boston
Jane McSmithy Chicago
Pero ahora quiero buscar un cierto prefijo "Mc". Podría, por supuesto, codificarlo, pero quiero un script awk que sea flexible. Escribí lo siguiente en 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";
}
que llamo el script como el siguiente:
awk -f 003_search_persons_prefix.awk prefix=Mc 003_persons.txt
Pero ahora se encuentra ningún registro.
El problema es el patrón de búsqueda "/^prefijo /". Sé que puedo reemplazar ese patrón de búsqueda por uno no regex, como en el primer script, pero supongamos que quiero hacerlo con una expresión regular, porque necesito que el prefijo realmente esté al comienzo del campo Apellido, ya que debería ser, siendo un prefijo y todo ;-)
¿Cómo puedo hacer esto?
de limpieza en el pasillo 5: deshacerse de todas las declaraciones nulos (trailing punto y coma), el cambio printf "\ n "simplemente imprimir" ", y cambiar printf $ 1" "$ 2 etc. para simplemente imprimir $ 1, $ 2, etc. –