2014-07-10 3 views
0

Je fichier d'entrée commecommande awk pour sélectionner le mot exact dans un champ

ab,1,3,qqq,bbc 
b,445,jj,abc 
abcqwe,234,23,123 
abc,12,bb,88 
uirabc,33,99,66 

Je dois sélectionner les lignes qui ne dispose que « abc ». Et notez que la chaîne abc peut apparaître dans n'importe quelle colonne. S'il vous plaît aidez-moi comment y parvenir en utilisant awk. Sortie:

b,445,jj,abc 
abc,12,bb,88 

Répondre

0

Grâce awk,

$ awk -F, '{for(i=1;i<=NF;i++){if($i=="abc") print $0;}}' file | uniq 
b,445,jj,abc 
abc,12,bb,88 

OU

$ awk -F, '{for(i=1;i<=NF;i++){if($i=="abc") {print; next}}}' file 
b,445,jj,abc,abc 
abc,12,bb,88 

Dans la variable de commande awk ci-dessus séparateur de champ est réglé sur ,. AWk analyse le fichier d'entrée ligne par ligne. for La fonction permet de parcourir tous les champs d'une ligne. Si la valeur d'un champ particulier est abc, il imprime la ligne entière.

+0

Ne serait-ce imprimer une ligne plusieurs fois si abc se produit dans plus d'une colonne? – beny23

+0

a ajouté la commande 'uniq' à la fin. –

+0

Je pense que la commande 'uniq' supprime seulement les doublons. –

4

Vous pouvez également utiliser grep simple:

grep "(^|,)abc(,|$)" file 

Ou si vous devez utiliser awk

awk '/(^|,)abc(,|$)/' file 
+0

Ce 'awk' était mieux que le mien +1 – Jotne

0

En utilisant awk

awk 'gsub(/(^|,)abc(,|$)/,"&")' file 
b,445,jj,abc 
abc,12,bb,88 

Basé sur Beny23s regex.
Il n'a pas l'air de abc où son départ de ^ départ ou d'un , et
se termine par un , ou à la fin de la ligne $

0

Un autre en utilisant beny23 regex:

awk 'NF>1' FS="(^|,)abc(,|$)" infile 

Non demandé mais si vous ressentez le besoin de filtrer les lignes avec une seule occurrence:

$ cat infile 
ab,1,3,qqq,bbc 
b,445,jj,abc 
abcqwe,234,23,123 
abc,12,bb,88 
abc,12,bb,abc 
uirabc,33,99,66 

Ce sera très pratique:

$ awk 'NF==2' FS="(^|,)abc(,|$)" infile               
b,445,jj,abc 
abc,12,bb,88 

également possible en utilisant une solution Jotne:

$ awk 'gsub(/(^|,)abc(,|$)/,"&")==1' infile 
Questions connexes