awk commande conditionnelle multiple

J’essaie de sélectionner des chaînes avec awk mais je ne reçois pas exactement ce que je veux

les données que j’ai sont dans une colonne comme ça

name1 condition1 name2 condition2/condition1 name3 CONDITION3 name4 condition1/condition4 name5 CND1 name6 condition6 name7 cnd1 name8 condition3/cnd1 name9 CND1/condition2 

J’essaie de choisir condition1 et cnd1 indépendamment de sa position et de la casse des lettres.

Je veux que la sortie soit comme (condition1 et cnd1 en combinaison avec n’importe quoi)

 name2 condition2/condition1 name4 condition1/condition4 name8 condition3/cnd1 name9 CND1/condition2 

et une autre sortie à ressembler (condition1 et cnd1 ALONE)

 name1 condition1 name5 CND1 name7 cnd1 

J’utilise cette commande

 awk 'BEGIN{IGNORECASE=1} $2 ~ /^cnd1$/ || /^condition1$/' directory/file.tab 

cette commande élimine toutes les combinaisons.

Comment puis-je former la bonne commande pour cela?

Vous devez répéter les $2 ~ dans la deuxième partie du || expression.

 awk 'BEGIN{IGNORECASE=1} $2 ~ /^cnd1$/ || $2 ~ /^condition1$/' 

Ou utilisez la regex | opérateur:

 awk 'BEGIN{IGNORECASE=1} $2 ~ /^(cnd|condition)1$/' 

Pour le premier cas, condition1 et cnd1 en combinaison avec quoi que ce soit, essayez ceci:

 awk 'BEGIN{IGNORECASE=1} $2 ~ /(cnd|condition)1/ && $2 ~ "/"' 

Si vous écrivez dans des fichiers, vous pouvez le faire en un seul passage:

 awk ' BEGIN {IGNORECASE=1} $2 ~ /\<(cnd|condition)1\>/ { if ($2 ~ /\//) print > combined_cnd1 else print > only_cnd1 } ' 

Notez l’utilisation des limites de mots \< et \> pour empêcher les fausses correspondances pour des choses comme "ACND1" et "condition11"