Grep para um elemento específico

Grep para um elemento específico

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 os valores na coluna 1. Quando solicitado, se o usuário inserir 3. Desejo imprimir a coluna 2.

Então eu escrevi.

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

Se labelNumfor 3, obtenho a saída como2017-05-30

Mas, se o usuário inserir labelNumcomo 2, recebo:

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

Porque está procurando por '2' em todo o arquivo .txt. Porém, quero a coluna 2 para labelNum2, que seria2017-05-27

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

Obrigado.

Editar: as linhas são dinâmicas e podem mudar conforme e quando mais entradas são adicionadas ao arquivo de texto. Então não posso usar sed para pular para a linha

Responder1

Com solteiroestranho:

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum- passando labelNumo valor da variável para o script awk

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

Responder2

Você também pode ficar próximo da sua solução:

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

Que corresponderá ao início da linha, ou

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

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

informação relacionada