加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:33:11 所属栏目:百科 来源:网络整理
导读:我正在学习awk,我无法将变量传递给脚本,并将其用作正则表达式搜索模式的一部分。 这个例子是有创意的,但显示了我的概念。 我的数据如下: Eddy Smith 0600000000 1981-07-16 Los AngelesFrank Smith 0622222111 1947-04-29 Chicago Victoria McSmith 0687
我正在学习awk,我无法将变量传递给脚本,并将其用作正则表达式搜索模式的一部分。

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

我的数据如下:

Eddy        Smith       0600000000  1981-07-16    Los Angeles
Frank       Smith       0622222111  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 Cityn";
}

#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,lastName and City

#print column headers
BEGIN {
    printf "firstName lastName Cityn";
}

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

我打电话给这样的脚本:

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

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

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

我该如何做?

你可以试试这个
BEGIN{
 printf "firstName lastName Cityn";
 split(ARGV[1],n,"=")
 prefix=n[2]
 pat="^"prefix
}
$0 ~ pat{
    print "found: "$0
}

产量

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读