awk:除以零输入记录号 1,文件源代码行号 1
awk: division by zero input record number 1, file source line number 1
我试图通过使用 log2FoldChange 的符号乘以 p 值的倒数来获得带符号的 log10 转换的 t 检验 P 值,
cat test.xlx | sort -k7g \
| cut -d '_' -f2- \
| awk '!arr[]++' \
| awk '{OFS="\t"}
{ if (>0) printf "%s\t%4.3e\n", , 1/; else printf "%s\t%4.3e\n", , -1/ }' \
| 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
正如@jas 在评论中指出的那样,您需要跳过 header 行,但您的脚本可能需要进行更多的清理工作。试试这个:
sort -k7g test.xlx |
awk '
BEGIN { OFS="\t" }
{ sub(/^[^_]+_/,"") }
(~/[0-9]/) && (!seen[]++) { printf "%s\t%4.3e\n", , (?(>0?1:-1)/: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
当 $7 为零时,以上将打印零结果而不是失败。
你的原始脚本中的 cut -d '_' -f2-
有什么意义(上面用 sub()
实现?你的输入文件中没有任何 _
。
我试图通过使用 log2FoldChange 的符号乘以 p 值的倒数来获得带符号的 log10 转换的 t 检验 P 值,
cat test.xlx | sort -k7g \
| cut -d '_' -f2- \
| awk '!arr[]++' \
| awk '{OFS="\t"}
{ if (>0) printf "%s\t%4.3e\n", , 1/; else printf "%s\t%4.3e\n", , -1/ }' \
| 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
正如@jas 在评论中指出的那样,您需要跳过 header 行,但您的脚本可能需要进行更多的清理工作。试试这个:
sort -k7g test.xlx |
awk '
BEGIN { OFS="\t" }
{ sub(/^[^_]+_/,"") }
(~/[0-9]/) && (!seen[]++) { printf "%s\t%4.3e\n", , (?(>0?1:-1)/: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
当 $7 为零时,以上将打印零结果而不是失败。
你的原始脚本中的 cut -d '_' -f2-
有什么意义(上面用 sub()
实现?你的输入文件中没有任何 _
。