正则表达式 – 将变量传递给awk,并在正则表达式中使用变量

前端之家收集整理的这篇文章主要介绍了正则表达式 – 将变量传递给awk,并在正则表达式中使用变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习awk,我无法将变量传递给脚本,并将其用作正则表达式搜索模式的一部分。

这个例子是有创意的,但显示了我的概念。

我的数据如下:

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

我想要一个awk脚本,我可以传递一个变量,然后让awk脚本做一个正则表达式的变量。
我现在有这个脚本叫做“003_search_persons.awk”。

  1. #this awk script looks for a certain name,returns firstName,lastName and City
  2.  
  3. #print column headers
  4. BEGIN {
  5. printf "firstName lastName City\n";
  6. }
  7.  
  8. #look for the name,print firstName,lastName and City
  9. $2 ~ name {
  10. printf $1 " " $2 " " $5 " " $6;
  11. printf "\n";
  12. }

我打电话给这样的脚本:

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

它返回以下,这是好的。

  1. firstName lastName City
  2. Eddy Smith Los Angeles
  3. Frank Smith Chicago
  4. Victoria McSmith Los Angeles
  5. Barbara Smithy Boston
  6. Jane McSmithy Chicago

但是现在我想要找一个前缀“Mc”。我可以把这个硬编码,但是我想要一个灵活的awk脚本。我在003_search_persons_prefix.awk中写了以下内容

  1. #this awk script looks for a certain prefix to a name,lastName and City
  2.  
  3. #print column headers
  4. BEGIN {
  5. printf "firstName lastName City\n";
  6. }
  7.  
  8. #look for the prefix,lastName and City
  9. /^prefix/{
  10. printf $1 " " $2 " " $5 " " $6;
  11. printf "\n";
  12. }

我打电话给这样的脚本:

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

但现在没有发现任何记录。

问题是搜索模式“/ ^前缀/”。我知道我可以用非正则表达式替换那个搜索模式,如第一个脚本,但是假设我想用正则表达式来做,因为我需要前缀真的是在lastName字段的开始,因为它应该是一个前缀和全部;-)

我该如何做?

你可以试试这个
  1. BEGIN{
  2. printf "firstName lastName City\n";
  3. split(ARGV[1],n,"=")
  4. prefix=n[2]
  5. pat="^"prefix
  6. }
  7. $0 ~ pat{
  8. print "found: "$0
  9. }

产量

  1. $ awk -f test.awk name=Jane file
  2. firstName lastName City
  3. found: Jane McSmithy 0612345678 1947-01-15 Chicago

看看awk documentation更多。 (从头到尾阅读!)

猜你在找的正则表达式相关文章