Disons que j'ai un fichier:
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
Je veux que chaque ligne qui a un nombre différent de 1 dans la deuxième colonne le change en 0 et garde le reste.
Si j'utilise if
(c'est-à-dire une déclaration conditionnelle), tout va bien:
awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0
Mais lorsque j'utilise le bloc conditionnel, quelque chose de indésirable se produit:
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
Vous pouvez voir ce qui ne va pas.
- Comment puis-je corriger cette erreur?
- Pourquoi cette erreur se produit-elle?
- Quelle est la différence entre une instruction conditionnelle et un bloc conditionnel?
awk '$2!=1?$2=0:"";1' file
.next
. Je suppose que cela supprime la deuxième impression si la première est vraie. Quelque chose commecontinue
dansC
.next
supprime le traitement de la ligne d'entrée actuelle, passez à la suivante. Le même rôle quewhile
, mais pour l'ensemble duawk
programme. Aussi,awk
a sa proprewhile
Le deuxième bloc
n'est pas conditionnel. Il est appliqué pour chaque ligne et imprime ainsi chaque ligne.
Au lieu de cela, écrivez:
Ou écrivez:
Cela entraînera le saut du bloc inconditionnel, si le bloc conditionnel correspond.
la source