【问题标题】:Finding exact patterns with AWK使用 AWK 查找精确模式
【发布时间】:2013-11-08 09:38:53
【问题描述】:

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

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 

我正在尝试用 AWK 来计算 GAT 出现的次数:

awk -F " " '/AAC/ {++i} END {print "Count of TC is "i"."}'

它给了我一个不正确的,比正确的更高的价值。我也尝试过:

awk -F " " '/^AAC$/ {++i} END {print "Count of TC is "i"."}'

但它什么也没给我,换句话说:“TC 的计数是。”

有什么建议吗?

【问题讨论】:

    标签: awk


    【解决方案1】:

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

    试试这个gnu awk

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

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

    一个awk循环版本

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

    另一种方法:

    awk '{a+=gsub(/AAA/,x)} END {print a}' file
    6
    

    【讨论】:

    • RS=" " 是错误的,例如,它不会在除最后一行之外的任何行的末尾找到模式。您需要 RS='[[:space:]]+' 来完成您想要做的事情,但是该解决方案特定于允许多字符 RS 的 awks,例如傻瓜。并且变量 RS 包含记录分隔符,而不是记录选择器。
    猜你喜欢
    • 2020-10-12
    • 2013-07-18
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多