บอกว่าฉันมีไฟล์:
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
คุณสามารถเห็นสิ่งที่ผิด
- ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร
- ทำไมข้อผิดพลาดนี้เกิดขึ้น?
- อะไรคือข้อแตกต่างระหว่างคำสั่งแบบมีเงื่อนไขและบล็อกแบบมีเงื่อนไข
awk '$2!=1?$2=0:"";1' file
ด้วย