是否可以像使用grep那样用awk突出显示搜索短语?
给定以下文件
基因 AAATTTGCAGAGATTACAGGGGGGG
这个grep命令$ grep --color=auto GATTACA file.txt生成
AAATTTGCAGAGATTACAGGGGGGG
其中粗体的是彩色文本。
因为我实际使用的文件具有跨越多行的模式,所以我使用的是awk而不是grep。相反,这些文件如下所示:
基因 阿塔特加加特 塔卡格
我可以使用下面的awk代码来用我的短语打印记录
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},所以我返回的整个结果会改变颜色。
awk 'BEGIN{RS=">"; FS="\n";}/GATTACA/{print "\033[0;32m"$0"\033[0m"}' file.txt返回
基因 AAATTTGCAGAGATTACAGGGGGGG
我也试过这个:
awk 'BEGIN{RS=">"; FS="\n";}"\033[0;32m"/GATTACA/"\033[0m"{print$0}' file.txt它只返回错误:
awk:(FILENAME=nametest.txt FNR=1)致命:零次除法
我只是不知道如何将颜色代码合并到搜索词中。可能我的awk代码需要完全重新格式化。请让我知道!再次感谢!
发布于 2016-06-09 20:55:36
拉尔斯·费舍尔在comment中回答了这个问题。这个社区的wiki帖子正式化(并改进了)它。
若要只对搜索项进行着色,可以使用全局替换(gsub)和以下颜色代码:
awk 'BEGIN { RS=">"; FS="\n" } gsub(/GATTACA/, "\033[0;32m&\033[0m", $0)' file这将记录分隔符(RS)设置为>而不是默认的\n (换行),字段分隔符(FS)设置为\n,而不是其他空格字符的默认设置。然后,它对该查询执行全局替换,将文本替换为被适当颜色代码包围的文本。
gsub会返回它所做的替换的数量,并且默认情况下会打印没有命令的子句,因此,这段代码以子句的形式运行替换,因此,只有当存在替换时,awk才会打印。(gsub做了它的工作,在没有替换时返回零(false),在有替换时返回非零(true)。)
https://stackoverflow.com/questions/37313063
复制相似问题