ファイルがあるとしましょう。
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
2番目の列の数字が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
何が間違っているかを見ることができます。
- このエラーをどのように解決できますか?
- このエラーはなぜ発生しますか?
- 条件文と条件ブロックの違いは何ですか?
ベストアンサー1
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
デフォルトの動作は、条件が真であり、1
何もしない場合です。パラメータがない場合はデフォルトで印刷されます。awk
print
print
$0