Grep для определенного элемента

Grep для определенного элемента

Я попал в сложную ситуацию. У меня есть файл, содержимое которого выглядит так:

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

Теперь пользователь выбирает изменение даты, выбирая labelNum, который будет значением в столбце 1. Если после запроса пользователь вводит 3, я хочу напечатать столбец 2.

И я написал.

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

Если labelNumравно 3, я получаю вывод как2017-05-30

Но если пользователь введет labelNum2, то я получу:

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

Потому что он ищет '2' везде в файле .txt. Однако я хочу столбец 2 для labelNum2, что будет2017-05-27

Есть ли способ это сделать? Я пробовал использовать awk вместо grep, но безуспешно.

Спасибо.

Редактировать: Строки динамические и могут меняться по мере добавления новых записей в текстовый файл. Поэтому нельзя использовать sed для перехода к строке

решение1

С однимawk:

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

  • -v lbl=$labelNum- передача labelNumзначения переменной в скрипт awk

  • $1 == lbl- если значение 1-го столбца равно значению переменной - выполняется следующее выражение

решение2

Вы также можете остаться при своем решении:

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

Который будет соответствовать началу строки, или

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

Работало бы так же, но внутри awk экранирование затруднительно.

Связанный контент