首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if/then语句中使用shell变量时出现awk语法错误

在if/then语句中使用shell变量时出现awk语法错误
EN

Stack Overflow用户
提问于 2020-01-21 15:57:05
回答 1查看 61关注 0票数 0

我试图让以下代码正常工作,但我一直在脚本的awk部分遇到语法错误。

简而言之,我想计算一个截止值,并将其作为浮点小数存储在一个数值变量中(例如,截止值)。我希望将此变量传递给awk脚本,我尝试了该脚本,但仍然遇到语法问题,出现以下错误:

代码语言:javascript
复制
    awk: syntax error at source line 3
       context is
           >>> <<<

下面是可能包含文件Spl-129-run10_xx.fa的前四行的示例序列:

>Spl-129_TTCAGTGG_80 CAGACATAGTCATCTATCAATACATaGATGATTTGTATGTAGGATCTGACTTAGAAATAGGGCAGCATAGAACAAAAATAGAGGAACTGAGACAACATCTGTTGAGGTGGGGATTTACCACACCAGACAAAAAACATCAGAAAGAACCTCCATTCCTTTGGATGGGTTATGAACTCCATCCTGATAAATGGACAGTACAGCCTATAGTGCTGCCAGAAAAGGACAGCTGGACTGTCAATGACATACAGA

>Spl-129_TGGGGACC_80 CAGACATAGTCATCTATCAATACATaGATGATTTGTATGTAGGATCTGACTTAGAAATAGGGCAGCATAGAACAAAAATAGAGGAACTGAGACAACATCTGTTGAGGTGGGGATTTACCACACCAGACAAAAAACATCAGAAAGAACCTCCATTCCTTTGGATGGGTTATGAACTCCATCCTGATAAATGGACAGTACAGCCTATAGTGCTGCCAGAAAAGGACAGCTGGACTGTCAATGACATACAGA

现在来看代码:

代码语言:javascript
复制
    for file in *fa; do
        name=`echo $file | cut -d'.' -f1`;
        awk 'BEGIN{RS=">"}NR>1{sub("\n","\t"); gsub("\n",""); print RS$0}' $file | tail -n+2 | sed 's/_/\t/g' >tmp;
        m=`cut -f3 tmp | sort -nr | head -n1`;
        cutoff=`echo "(-1.24*10^-21*$m^6)+(3.53*10^-17*$m^5)-(3.90*10^-13*$m^4)+(2.12*10^-9*$m^3)-(6.06*10^-6*$m^2)+(0.018*$m)+3.15" | bc`;
        echo "$name\t$cutoff";

        awk -v c="$cutoff" -v n="$name" '{ 
            if (c < 4) 
           awk '$3 > 2' tmp >n"_CUT.txt"; 

           else awk '$3 > c' tmp >n"_CUT.txt"; 
    }';
    done

预期输出应该是以制表符分隔的文件(例如,"Spl-129-run10_CUT.txt"),其示例格式为

>Spl-129 TGGGGACC 80 sequence

最后,我想利用上面计算的截断变量来过滤小于截止值的序列(使用第三个字段中的值作为比较),条件是如果截止值小于4,则使用截止值2。

如果您能提供任何帮助,我们将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-01-22 01:26:08

awk sniplet有多个问题。特别是,在awk脚本中似乎存在对awk的不必要调用:

代码语言:javascript
复制
 awk -v c="$cutoff" -v n="$name" '{ 
            if (c < 4) 
           awk '$3 > 2' tmp >n"_CUT.txt"; 

           else awk '$3 > c' tmp >n"_CUT.txt"; 
    }';

如果没有额外的细节(和样本输入),就很难提供一个有效的解决方案。考虑发布示例输入和输出。特别是,它不清楚应该如何从输入执行截断计算。

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

https://stackoverflow.com/questions/59836471

复制
相关文章

相似问题

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