Grep para um elemento específico

1

Eu estou meio preso em uma situação complicada. Eu tenho um arquivo cujo conteúdo é assim:

3               2017-05-30      2017-09-29
2               2017-05-27      2017-08-26
1               2017-05-27      2017-08-26

Agora, o usuário seleciona modificar uma data escolhendo labelNum, que seriam valores na coluna 1. Após o prompt, se o usuário inserir 3. Quero imprimir a coluna 2.

Então eu escrevi.

cat temp.txt | grep $labelNum | awk '{print $2}'

Se labelNum for 3, obtenho a saída como 2017-05-30

Mas, se o usuário digitar labelNum como 2, eu recebo:

2017-05-30
2017-05-27
2017-05-27

Porque ele está procurando por '2' em todo lugar no arquivo .txt. No entanto, quero a coluna 2 para labelNum 2, que seria 2017-05-27

Existe uma maneira de fazer isso? Eu tentei usar o awk para substituir o grep mas sem sorte.

Obrigado.

Editar: As linhas são dinâmicas e podem ser alteradas à medida que mais entradas são adicionadas ao arquivo de texto. Então não posso usar sed para pular para a linha

    
por suhas savkoor 01.06.2017 / 14:38

2 respostas

1

Com um único awk :

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt
  • -v lbl=$labelNum - passando o valor da variável labelNum para o script awk

  • $1 == lbl - se o valor da primeira coluna for igual ao valor da variável - executa a expressão seguida

por 01.06.2017 / 14:41
0

Você também pode ficar por perto de sua solução:

cat temp.txt | grep ^$labelNum | awk '{print $2}'

Que corresponderá no início da linha ou

awk '/^'$labelNum'/{print $2}' temp.txt

Funcionaria da mesma forma, mas o escape é complicado dentro do awk.

    
por 08.06.2017 / 13:08