2010-09-13 2 views
0

Je souhaite imprimer toutes les lignes où le 3ème champ (champs séparés par:) NE commence PAS par # (pour signifier que le 3ème champ est un commentaire). Veuillez noter qu'il peut y avoir un espace (s) entre: et #.Impression de lignes à partir d'un fichier où un champ spécifique ne commence pas par quelque chose

Exemple de saisie

A: B: #hdfghdfg

A: B: #dfdfdfg

A: B: C

sortie désiré:

A: B : C

J'ai essayé:

awk -F: '3 $ ~/^ #/{print}' run_out5> run_out6

mais il ne fonctionne pas

Merci,

Jagrati

Répondre

4

Le regex pourrait être un petit peu plus propre:

awk -F: '$3 !~ /^ ?#/ { print }' 

Il est souvent préférable d'attendre des espaces de répétition (espace ou tabulation) plutôt qu'un seul caractère d'espace, ce qui peut regarder ide numérique dans la sortie imprimée.

awk -F: '$3 !~ /^[[:space:]]*#/ { print }' 
0

Utilisez !~ pour sélectionner les lignes qui ne correspondent pas à l'expression rationnelle.
Ajustez l'expression rationnelle de façon à ce qu'elle corresponde aux champs avec des espaces de début.

awk -F : '$3 !~ /^ *#/ {print}' 
Questions connexes