Nói rằng tôi có một tập tin:
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
Tôi muốn mỗi dòng có số không bằng 1 trong cột thứ hai để thay đổi thành 0 và giữ phần còn lại.
Nếu tôi sử dụng if
(tức là tuyên bố có điều kiện), mọi thứ đều ổn:
awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0
Nhưng khi tôi sử dụng khối có điều kiện, một cái gì đó không mong muốn sẽ xảy ra:
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
Bạn có thể thấy những gì sai.
- Làm cách nào để khắc phục lỗi này?
- Tại sao lỗi này xảy ra?
- Có gì khác nhau giữa một câu điều kiện và một khối có điều kiện?
awk '$2!=1?$2=0:"";1' file
.