Katakanlah saya punya file:
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
Saya ingin setiap baris yang memiliki angka tidak sama dengan 1 di kolom kedua untuk mengubahnya menjadi 0 dan menyimpan sisanya.
Jika saya menggunakan if
(yaitu pernyataan kondisional), semuanya OK:
awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0
Tetapi ketika saya menggunakan blok bersyarat, sesuatu yang tidak diinginkan terjadi:
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
Anda dapat melihat apa yang salah.
- Bagaimana cara saya memperbaiki kesalahan ini?
- Mengapa kesalahan ini terjadi?
- Apa perbedaan antara pernyataan bersyarat dan blok bersyarat?
awk '$2!=1?$2=0:"";1' file
.next
. Saya kira ini akan menekan cetakan kedua jika yang pertama benar. Sesuatu seperticontinue
diC
.next
menekan pemrosesan jalur input saat ini, lewati ke yang berikutnya. Peran yang sama denganwhile
, tetapi untuk keseluruhanawk
program. Juga,awk
memiliki sendiriwhile
Blok kedua masuk
tidak bersyarat. Itu ditindaklanjuti untuk setiap baris, dan dengan demikian mencetak setiap baris.
Sebaliknya, tulis:
Atau tulis:
Ini akan menyebabkan blok bersyarat dilewati, jika blok bersyarat cocok.
sumber