条件块与条件语句(如果有)

欧克

说我有一个文件:

PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17

我希望第二列中数字不等于1的每一行将其更改为0并保留其余部分。

如果我使用if(即条件语句),则一切正常:

awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0

但是当我使用条件块时,发生了一些不希望的事情:

awk '$2!=1 {print $1,"0"} {print $0}' file
PRO 1
GLN 0
GLN 5.55112e-17
ILE 0
ILE -6.245e-17
THR 0
THR 5.55112e-17

您可以看到出了什么问题。

  • 如何解决此错误?
  • 为什么会发生此错误?
  • 条件语句和条件块有什么区别?
cuonglm

if声明中,您有一个else如果if不匹配,else则执行分支。

在条件语句中,无论条件为真还是假,两个动作都将执行。

一个简单的解决方法:

$ awk '$2!=1 {print $1,"0";next};{print $0}' file
PRO 1
GLN 0
ILE 0
THR 0

您可以使其更加简洁:

$ awk '$2 != 1 {print $1,"0";next};1' file
PRO 1
GLN 0
ILE 0
THR 0

当条件为true1且没有任何操作时,awk默认行为为printprint没有参数将$0默认打印

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章