使用GREP和AWK从文件中提取子字符串的值



我有一个名为grep的文件示例如:

ALUMNI=([123]="Jonas" [124]="Anna") 
TEACHERS=([123]="John" [124]="Carol")

读取为

ALUMNI=(
[123]="Jonas"
[124]="Anna"
)
TEACHERS=(
[123]="John"
[124]="Carol"
)

我想制作一个函数来提取名称、给定角色和id

我试着用这样的grep

grep -HiRE "(ALUMNI)[^)]*((123)W+)([A-Z][a-z]+)(")" --include grepExamples
grep -HiRE "(ALUMNI)[^)]*((124)W+)([A-Z][a-z]+)(")" --include grepExamples

允许我识别字符串中对我感兴趣的部分

也是如此

grep -HiRE "(ALUMNI)[^)]*((123)W+)" --include grepExamples
grep -HiRE "(ALUMNI)[^)]*((124)W+)" --include grepExamples

它允许我指向我需要的值之前的文本

但是,如果我试图管道到awk,我无法获得名称本身

与第一个例子

$ grep -HiRE "(ALUMNI)[^)]*((123)W+)" --include grepExamples
grepExamples:ALUMNI=([123]="Jonas" [124]="Anna")
$ grep -HiRE "(ALUMNI)[^)]*((123)W+)" --include grepExamples | awk '{ print $1; }'
grepExamples:ALUMNI=([123]="Jonas"
$ grep -HiRE "(ALUMNI)[^)]*((123)W+)" --include grepExamples | awk '{ print $2; }'
[124]="Anna")

不知道如何继续。。。


我只想为123校友烧钱,然后得到乔纳斯o替124老师找卡罗尔(等等(

这个小awk命令可能会有所帮助:

awk -v role=TEACHERS -v id=124 -F'[=()" ]*' 
'$1==role{for(i=2;i<=NF;i+=2){if($i=="["id"]"){print $(i+1)}}}' file
Carol

解释为多行脚本:

search.awk

BEGIN {
# Gives us records like this
# ALUMNI [123] Jonas [124] Anna  
# TEACHERS [123] John [124] Carol
FS="[=()" ]*"
}
# When the first field matches the role ...
$1==role {
# loop through id fields
for(i=2;i<=NF;i+=2){
# if the id matches, print the name
if($i=="["id"]"){
print $(i+1)
}
}   
}

运行脚本:

awk -v role=TEACHERS -v id=124 -f search.awk file

相关内容

  • 没有找到相关文章

最新更新