Powiedz, że mam plik:
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
Chcę, aby każdy wiersz, który ma liczbę nierówną do 1 w drugiej kolumnie, zmienił go na 0 i zatrzymał resztę.
Jeśli używam if
(tj. Instrukcji warunkowej), wszystko jest w porządku:
awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0
Ale kiedy używam bloku warunkowego, dzieje się coś niepożądanego:
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
Możesz zobaczyć, co jest nie tak.
- Jak naprawić ten błąd?
- Dlaczego występuje ten błąd?
- Czym różni się instrukcja warunkowa od bloku warunkowego?
awk '$2!=1?$2=0:"";1' file
.