Encontre uma palavra usando o AWK

3

Existe uma maneira de encontrar um registro específico em toda a linha?

Este é o meu arquivo:

one two three four
two three four five
three four five six
four five six seven
five six seven eight

Como procuro por todas as linhas que incluem duas?

    
por Mohammad Reza Rezwani 09.07.2014 / 17:40

2 respostas

5
awk '/(^| )two( |$)/' ...

Os grupos (..) estão tentando garantir que correspondamos apenas "dois". Na frente, ele precisa ser o começo da linha ou um espaço e, no final, precisa ser um espaço ou o fim da linha. Em suma, estamos nos certificando de que o campo seja igual a dois.

Hmm, aparentemente, você também pode usar tags de limite de palavras (que parece um pouco mais elegante, mas não é tão portátil):

awk '/\<two\>' ...

Não tenho certeza de qual é o seu caso de uso específico (suponho que não sejam números), você pode estar bem com grep -E '\<two\>' ... , mas awk dará a você um pouco mais de flexibilidade se precisar fazer outras coisas.

    
por Oli 09.07.2014 / 17:45
2

Para esta tarefa simples, você também pode usar o grep :

grep  'two' /path/to/file

saída:

one two three four
two three four five

Para obter o "dois", se não estiver no início de uma linha:

grep ' two ' /path/to/file - > one two three four

ou com meta-caracteres para obtê-lo apenas no começo de uma linha:

grep '^two' /path/to/file - > two three four five

    
por TuKsn 09.07.2014 / 18:10