Como posso corresponder uma string quando não precedida por um dígito usando o awk?

0

Eu tenho um arquivo em que a segunda coluna se parece com isso:

37M533N38M
14M1170N45M233N16M
3S45M3N35M

Eu quero extrair as strings que contêm 3N mas nenhum outro número imediatamente antes do 3 . Por exemplo, A3N corresponderia, mas 23N não. Também deve ser notado que 3N nunca estaria presente sozinho e a string não iniciará com 3N e não terminará com 3N . O resultado deve ser a terceira linha acima:

3S45M3N35M

Como posso fazer isso no awk? Eu tentei $2 ~ /3N/ , mas isso certamente não funciona.

    
por user3138373 17.02.2017 / 21:58

2 respostas

5

Você pode usar uma classe de caractere negada: [^0-9] significa "qualquer caractere, exceto um dígito":

awk '$2~/[^0-9]+3N/' file

Se você também quiser corresponder casos em que 3N esteja no início do campo, para que não haja caracteres antes, use:

awk '$2~/(^|[^0-9])3N/' file

Se você deseja imprimir apenas o segundo campo e não toda a linha, use:

awk '$2~/[^0-9]3N/{print $2}' file

ou

awk '$2~/(^|[^0-9])3N/{print $2}' file
    
por 17.02.2017 / 22:23
0

Usando o grep:

grep [^0-9][3][N] file

v - to show those that don't match / invert match

[0-9][3][N] - pattern to find 3N with a positive integer preceding.

    
por 17.02.2017 / 22:26