两场师,awk

时间:2018-10-29 17:57:17

标签: math awk

我在awk中陷入了(也许很容易)函数的问题:我正在尝试使用以下代码逐行划分两个字段:

awk 'BEGIN{FS=OFS="\t"} $43 > 0 && $31 > 0 {$43/$31; print}' file.tsv

但是我不断收到这个错误:fatal: division by zero attempted,但是我已经检查了分母始终与零不同(实际上,我认为代码应该丢弃零),我也不知道发生了什么...请提出任何建议?非常感谢!

编辑:输入表具有以下格式(awk 'BEGIN{FS=OFS="\t"} {print $31,$43}' file.tsv | head -4):

triCount_PM triSum_altPM
3   25
3   7
3   0

2 个答案:

答案 0 :(得分:2)

例如"fnord" > 0在Awk中评估为true;您确实需要确保值是正确的数字。强制数字解释的常见技巧是添加零。

awk 'BEGIN{FS=OFS="\t"} 0+$43 > 0 && 0+$31 > 0 { print $43/$31 }' file.tsv

print总是打印$0(已初始化为当前输入行,尽管您可以从程序中直接或间接更改它);要打印其他内容,请将“其他内容”作为参数传递给print

答案 1 :(得分:1)

标题为零的结果不包含字段的数字,因此两个字段均为零。为此,您需要跳过标题(第一行的NR == 1测试)

$ awk 'NR==1{print "$43/$31"; next} $43>0 && $31>0 {print $43/$31}' file