grep / awk terceira coluna contendo string

0

Exemplo de string

blah:blah:example - 1234
blah1:blah2:example2 - 3213

O que eu quero verificar existe

- 1234

mas numérico pode ser diferente

Eu sei que posso usar

awk -F: '$3 ~ / - /' 

para verificar se "-" existe, mas como posso aplicar possibilidades numéricas?

    
por user297487 28.06.2018 / 16:18

2 respostas

2

Então, basicamente, você quer verificar se depois de '-' há alguns números?
Se você quiser fazer isso, você pode escrever awk -F: '$3 ~ / - [0-9]+/'


Solução mais avançada

Se você tem uma matriz de valores possíveis para o seu último número (es. 1, 2, 3, 4, 5), você poderia escrever algo assim.

values=(1 2 3 4 5)
awk -v vals="$(echo ${values[@]})" \
'{if(match(vals,$3" ")){print $0}}' input_file.txt

Isso imprimirá apenas as entradas de input_file.txt com o último número na matriz values que você especificou.

    
por 28.06.2018 / 16:24
1

O comando awk a seguir exibirá todas as linhas de file que tem um - em sua penúltima coluna delimitada por espaço em branco e um inteiro positivo em sua última coluna delimitada por espaço em branco:

awk '$(NF-1) == "-" && $NF ~ /^[0-9]+$/' file

O seguinte comando grep faria o mesmo:

grep -E -e '-[[:space:]]+[0-9]+$' file

O -E é necessário para entender o modificador + no padrão e -e é necessário para impedir que grep interprete o - no padrão como uma opção de linha de comando ( -e poderia também será alterado substituído por -- , que sinaliza o fim de qualquer opção de linha de comando).

    
por 28.06.2018 / 17:30

Tags