awk:除以零输入记录号1,文件源行号1

时间:2015-10-16 12:51:01

标签: shell awk statistics

我试图通过使用log2FoldChange的符号乘以pvalue的倒数得到符号log10变换的t检验P值,

cat test.xlx | sort -k7g \
             | cut -d '_' -f2- \
             | awk '!arr[$1]++' \
             | awk '{OFS="\t"} 
               { if ($6>0) printf "%s\t%4.3e\n", $1, 1/$7; else printf "%s\t%4.3e\n", $1, -1/$7 }' \
             | sort -k2gr > result.txt

text.xls =

                   ID               baseMean    log2FoldChange  lfcSE   stat    pvalue  padj
        ENSMUSG00000037692-Ahdc1    2277.002091 1.742481553 0.170388822 10.22650154 1.51e-24    2.13e-20
        ENSMUSG00000035561-Aldh1b1  768.4504879 -2.325533089    0.248837002 -9.345608047    9.14e-21    6.45e-17
        ENSMUSG00000038932-Tcfl5    556.1693605 -3.742422892    0.402475728 -9.298505809    1.42e-20    6.71e-17
        ENSMUSG00000057182-Scn3a    1363.915962 1.621456045 0.175281852 9.250564289 2.23e-20    7.89e-17
        ENSMUSG00000038552-Fndc4    378.821132  2.544026087 0.288831276 8.808000721 1.27e-18    3.6e-15

但得到错误awk:除以零  输入记录号1,文件  源行号1

1 个答案:

答案 0 :(得分:3)

正如@jas在评论中指出的那样,你需要跳过你的标题行,但你的脚本可能会比那更清晰。试试这个:

first_or_create

当$ 7为零时,上面会打印零结果而不是失败。

原始脚本中sort -k7g test.xlx | awk ' BEGIN { OFS="\t" } { sub(/^[^_]+_/,"") } ($6~/[0-9]/) && (!seen[$1]++) { printf "%s\t%4.3e\n", $1, ($7?($6>0?1:-1)/$7:0) } ' | sort -k2gr ENSMUSG00000035561-Aldh1b1 1.550e+16 ENSMUSG00000037692-Ahdc1 4.695e+19 ENSMUSG00000038552-Fndc4 2.778e+14 ENSMUSG00000038932-Tcfl5 1.490e+16 ENSMUSG00000057182-Scn3a 1.267e+16 的重点是什么(上面使用cut -d '_' -f2-实现了什么?您的输入文件中没有sub()