【发布时间】:2016-09-15 17:37:09
【问题描述】:
是否可以像使用 grep 一样使用 awk 突出显示搜索短语?
给定以下文件
>基因
AAATTTGCAGAGATTACAGGGGGGG
这个 grep 命令$ grep --color=auto GATTACA file.txt
产生
AAATTTGCAGAGATTACAGGGGGGG
粗体是彩色文本。
因为我实际使用的文件具有跨越多行的模式,所以我使用的是 awk 而不是 grep。所以文件看起来像这样:
>基因
AAATTTGCAGAGAT
TACAGGGGGG
我可以使用下面的 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
返回
基因
AATTTGCAGAGATTACAGGGGGGG
我也试过这个:
awk 'BEGIN{RS=">"; FS="\n";}"\033[0;32m"/GATTACA/"\033[0m"{print$0}' file.txt
只返回错误:
awk: (FILENAME=nametest.txt FNR=1) fatal: 除零尝试
我只是不确定如何仅将颜色代码合并到搜索词中。可能我的 awk 代码需要完全重新格式化。请告诉我!再次感谢!
【问题讨论】:
-
尝试了该线程的解决方案,但无法仅突出显示搜索词。相反,整个字段都是彩色的。可能与多行搜索和使用“{print$0}”返回整个字段有关。只是不知道如何解决它。谢谢!
-
要仅对搜索词进行着色,您可以使用具有如下颜色代码的 gsub:
BEGIN { RS=">"; FS="\n"; gene="GATTACA"}$0 ~ gene { gsub( gene, "\033[0;32m&\033[0m", $0); print$0 }&是找到的内容 (GATTACA)。