首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk选择具有特定字符串的元素

如何使用awk选择具有特定字符串的元素
EN

Stack Overflow用户
提问于 2022-09-14 13:33:59
回答 2查看 39关注 0票数 -2

下面有两个行的例子,但是实际数据有很多行。我只想选择在linux中以'viridae‘结尾的分类单元,也许以awk结尾。这类字串的序号与";“分裂的顺序不同,如正粘病毒科第8次,Solemoviridae第7次。

代码语言:javascript
复制
Viruses; Riboviria; Orthornavirae; Negarnaviricota; Polyploviricotina; Insthoviricetes; Articulavirales; Orthomyxoviridae; Alphainfluenzavirus

Viruses; Riboviria; Orthornavirae; Pisuviricota; Pisoniviricetes; Sobelivirales; Solemoviridae; Polerovirus

请问如何达到这个目标?谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-09-14 13:41:39

试试这个:

代码语言:javascript
复制
awk -F';' '{for(i=1;i<=NF;i++) if($i~"viridae") print $i}' file

如果你想剥夺领导或训练的空间:

代码语言:javascript
复制
awk -F '[ \t]*;[ \t]*' '{for(i=1;i<=NF;i++) if($i~"viridae") print $i}' file

问:如果没有匹配,如何在这一行中添加一个NA?

代码语言:javascript
复制
awk -F '[ \t]*;[ \t]*' '{
    f=0
    for(i=1;i<=NF;i++) if($i~"viridae$") {f=1; print $i}
    if (!f) print "N/A"
}' file
票数 1
EN

Stack Overflow用户

发布于 2022-09-14 14:16:41

为什么是awk?这就是编写grep的目的:-)

我创建了以下文件:

代码语言:javascript
复制
Prompt> cat test.txt
first latest nogeentest testament blabla
toet toet

我想看到所有的单词,以“测试”结束:

代码语言:javascript
复制
Prompt> grep -o "[a-z]*[a-z]test" test.txt
latest
nogeentest

我想看到所有包含“测试”一词的单词:

代码语言:javascript
复制
Prompt> grep -o "[a-z]*test[a-z]*" test.txt
latest
nogeentest
testament

你可能会得到以下方面的帮助:

代码语言:javascript
复制
Prompt> grep -o "[a-z]*[a-z]viridae" test.txt

玩得开心!

关于您的信息:[a-z]*[a-z]的意思是“任意数量的字母,后面跟着任何字母”,有时可以用[a-z]+替换。然而,在我的系统中,这似乎不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73717792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档