
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 labelNum
for 3, obtenho a saída como2017-05-30
Mas, se o usuário inserir labelNum
como 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 labelNum
2, 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
- passandolabelNum
o 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.