Я изучаю awk, и у меня возникают проблемы при передаче переменной в сценарий И использовании ее как части шаблона поиска регулярных выражений.
Пример придуман, но показывает мой зонд.
Мои данные следующие:
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
Мне нужен сценарий awk, который я могу передать переменной, а затем сделать так, чтобы скрипт awk сделал регулярное выражение для переменной.
У меня есть этот скрипт, который называется "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";
}
Я называю сценарий так:
awk -f 003_search_persons.awk name=Smith 003_persons.txt
Возвращает следующее, что хорошо.
firstName lastName City
Eddy Smith Los Angeles
Frank Smith Chicago
Victoria McSmith Los Angeles
Barbara Smithy Boston
Jane McSmithy Chicago
Но теперь я хочу поискать определенный префикс "Mc". Я мог бы, конечно, жестко закодировать это, но я хочу гибкий скрипт на awk. Я написал следующее в 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";
}
Я называю сценарий так:
awk -f 003_search_persons_prefix.awk prefix=Mc 003_persons.txt
Но теперь он не находит никаких записей.
Проблема в шаблоне поиска "/ ^ prefix /". Я знаю, что могу заменить этот шаблон поиска нерегулярным, как в первом сценарии, но предположим, что я хочу сделать это с регулярным выражением, потому что мне нужен префикс, чтобы он действительно находился в начале поля lastName, так как должно быть, будучи приставкой и все; -)
Как мне это сделать?