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

Но, если пользователь вводит labelNum как 2, я получаю:

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

Потому что он ищет «2» везде в файле .txt. Тем не менее, мне нужен столбец 2 для labelNum 2, который будет 2017-05-27

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

Благодарю.

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

  • Нумерация результатов grep
  • Как обмануть скрипт init в ответ 0
  • grep и скобки в тексте
  • grep возвращает «Бинарный файл (стандартный ввод) соответствует« при попытке найти строковый шаблон в файле
  • grep определенный формат, возможно ли это?
  • grep также возвращает не соответствующие строки
  • Как найти скрытую строку в нескольких каталогах
  • Grep для строки со списком файлов в качестве источника
  • 2 Solutions collect form web for “Grep для конкретного элемента”

    С одним awk :

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

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

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

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

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

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

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

    Будет работать одинаково, но побег непросто внутри awk.

    Linux и Unix - лучшая ОС в мире.