Bash - linha de correspondência se o número estiver dentro de um intervalo definido na linha

2

Eu tenho um arquivo de texto com o seguinte formato:

Item A,10-20
Item B,21-30
Item C,31-60
Item D,61-120

como posso pesquisar o arquivo com qualquer número e recebo a linha retornada que inclui o número dado pelo intervalo no segundo campo.

então digamos que eu pesquise 33 recebo Item C
se eu pesquisar por 100 , recebo Item D e assim por diante ...

(minha pergunta não foca na separação do campo, mas sim na correspondência da linha dentro do intervalo, então, se eu conseguisse exibir toda a linha, isso seria ótimo)

    
por nath 13.01.2018 / 23:45

2 respostas

3

Shorter awk:

$ awk -F'[,-]' -v s=11 's>=$2 && s<=$3' file1
Item A,10-20

$ awk -F'[,-]' -v s=100 's>=$2 && s<=$3' file1
Item D,61-120

$ awk -F'[,-]' -v s=61 's>=$2 && s<=$3' file1
Item D,61-120

Como mencionado nos comentários, se você quiser imprimir apenas os rótulos, basta adicionar {print $1} no final:

$ awk -F'[,-]' -v s=61 's>=$2 && s<=$3{print $1}' file1
Item D
    
por 14.01.2018 / 00:14
3

Algo parecido com isto?

$ awk -vval=33  -F, '{ label = $1; split($2, limits, "-"); } 
                     limits[1]+0 <= val && val <= limits[2]+0 {print label} ' < input
Item C

Nós apenas dividimos em , para separar o rótulo e depois dividimos em - para separar os limites baixo e alto. +0 para forçar a comparação como números.

    
por 13.01.2018 / 23:51