首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Awk -彩色多线图案(如grep)?

Awk -彩色多线图案(如grep)?
EN

Stack Overflow用户
提问于 2016-05-19 02:38:56
回答 1查看 827关注 0票数 0

是否可以像使用grep那样用awk突出显示搜索短语?

给定以下文件

基因 AAATTTGCAGAGATTACAGGGGGGG

这个grep命令$ grep --color=auto GATTACA file.txt生成

AAATTTGCAGAGATTACAGGGGGGG

其中粗体的是彩色文本。

因为我实际使用的文件具有跨越多行的模式,所以我使用的是awk而不是grep。相反,这些文件如下所示:

基因 阿塔特加加特 塔卡格

我可以使用下面的awk代码来用我的短语打印记录

代码语言:javascript
复制
awk 'BEGIN{RS=">"; FS="\n";}/GATTACA/{print$0}' file.txt

返回

基因 AAATTTGCAGAGATTACAGGGGGGG

但我希望我的模式是颜色(比如grep cmd):

基因 AAATTTGCAGAGATTACAGGGGGGG

任何帮助都会非常感谢,因为我仍然是非常新的unix和awk。这个问题不是How to print awk's results with different colors for different fields?的翻版。这个问题的不同之处在于它要求对搜索项着色,而不是整个字段。因为从技术上讲,我是在打印整个字段{print$0},所以我返回的整个结果会改变颜色。

代码语言:javascript
复制
awk 'BEGIN{RS=">"; FS="\n";}/GATTACA/{print "\033[0;32m"$0"\033[0m"}' file.txt

返回

基因 AAATTTGCAGAGATTACAGGGGGGG

我也试过这个:

代码语言:javascript
复制
awk 'BEGIN{RS=">"; FS="\n";}"\033[0;32m"/GATTACA/"\033[0m"{print$0}' file.txt

它只返回错误:

awk:(FILENAME=nametest.txt FNR=1)致命:零次除法

我只是不知道如何将颜色代码合并到搜索词中。可能我的awk代码需要完全重新格式化。请让我知道!再次感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 20:55:36

拉尔斯·费舍尔在comment中回答了这个问题。这个社区的wiki帖子正式化(并改进了)它。

若要只对搜索项进行着色,可以使用全局替换(gsub)和以下颜色代码:

代码语言:javascript
复制
awk 'BEGIN { RS=">"; FS="\n" } gsub(/GATTACA/, "\033[0;32m&\033[0m", $0)' file

这将记录分隔符(RS)设置为>而不是默认的\n (换行),字段分隔符(FS)设置为\n,而不是其他空格字符的默认设置。然后,它对该查询执行全局替换,将文本替换为被适当颜色代码包围的文本。

gsub会返回它所做的替换的数量,并且默认情况下会打印没有命令的子句,因此,这段代码以子句的形式运行替换,因此,只有当存在替换时,awk才会打印。(gsub做了它的工作,在没有替换时返回零(false),在有替换时返回非零(true)。)

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

https://stackoverflow.com/questions/37313063

复制
相关文章

相似问题

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