Grep para un elemento específico

Grep para un elemento específico

Estoy un poco atrapado en una situación complicada. Tengo un archivo cuyo contenido se ve así:

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

Ahora, el usuario selecciona modificar una fecha eligiendo labelNum, que serían los valores en la columna 1. Cuando se le solicite, si el usuario ingresa 3, quiero imprimir la columna 2.

Entonces escribí.

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

Si labelNumes 3, obtengo el resultado como2017-05-30

Pero, si el usuario ingresa labelNumcomo 2, obtengo:

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

Porque busca '2' en todas partes del archivo .txt. Sin embargo, quiero la columna 2 por labelNum2, que sería2017-05-27

¿Hay alguna forma de hacer esto? Intenté usar awk para reemplazar grep pero no tuve suerte.

Gracias.

Editar: las filas son dinámicas y pueden cambiar a medida que se agregan más entradas al archivo de texto. Así que realmente no puedo usar sed para saltar a la línea.

Respuesta1

con solteroawk:

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

  • -v lbl=$labelNum- pasar labelNumel valor de la variable al script awk

  • $1 == lbl- si el valor de la primera columna es igual al valor de la variable - ejecuta la siguiente expresión

Respuesta2

También puede quedarse con su solución:

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

Que coincidirá al principio de la línea, o

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

Funcionaría igual, pero escapar es complicado dentro de awk.

información relacionada