用AWK寻找精确模式

用AWK寻找精确模式,awk,Awk,我在寻找确切的模式时遇到问题。我有一个包含以下信息的文件: GAT CCA AAA CAC ATT CTC CCT GGT AGC ATG GAC AAG CAA CAT TTT GGG AGA AAT GGA GCA AAA AAA CAT AAA CTT CAC AGT AAC AAA CAT AAA CAC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CCA CAC ACA CAC ACA CT

我在寻找确切的模式时遇到问题。我有一个包含以下信息的文件:

GAT CCA AAA CAC ATT CTC CCT GGT AGC ATG GAC AAG CAA CAT TTT GGG AGA AAT GGA GCA AAA AAA CAT 
AAA CTT CAC AGT AAC AAA CAT AAA CAC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CTC 
TCT CTC TCT CCA CAC ACA CAC ACA CTC GCA CTC ACA GCC TCA CAA CAC AGG TAT ACA TGT TTA CTT AGG 
例如,我试图计算GAT出现的次数,用AWK:

awk -F " " '/AAC/ {++i} END {print "Count of TC is "i"."}'
它给我的值不正确,比正确的值高。我也尝试过这样做:

awk -F " " '/^AAC$/ {++i} END {print "Count of TC is "i"."}'
但它什么也没给我,或者换句话说:“TC的计数是。”


有什么建议吗?

您需要使用循环测试每个字段,或者使用记录选择器将其划分,然后计数

试试这个
gnu awk

awk '/ACA/ {a++} END {print a}' RS='[[:space:]]+' file
4

A
awk
循环版本

awk '{for (i=1;i<=NF;i++) if ($i~/AAA/) a++} END {print a}' file
6

您需要使用循环测试每个字段,或者使用记录选择器对其进行分割,然后进行计数

试试这个
gnu awk

awk '/ACA/ {a++} END {print a}' RS='[[:space:]]+' file
4

A
awk
循环版本

awk '{for (i=1;i<=NF;i++) if ($i~/AAA/) a++} END {print a}' file
6
RS=”“
是错误的,例如,除了最后一行之外,它不会在任何行的末尾找到模式。您需要
RS='[[:space:][]+'
来完成您要做的事情,但是解决方案特定于允许多字符RSs的AWK,例如gawk。变量RS包含记录分隔符,而不是记录选择器。
RS=”“
是错误的,例如,除了最后一行之外,它不会在任何行的末尾找到模式。您需要
RS='[[:space:][]+'
来完成您要做的事情,但是解决方案特定于允许多字符RSs的AWK,例如gawk。变量RS包含记录分隔符,而不是记录选择器。