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 для перехода к строке

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.

  • Команда grep не поддерживает начало «^» и «$» конца привязки строк, когда она с -Pz
  • Как проверить, содержит ли строка подстроку в тире или золе?
  • sed, grep или tr, которая возвращает только латинские символы из файла UTF-8
  • Использование grep с шаблоном, который содержит переменную, подлежащую расширению
  • Грепинг по огромной производительности файла
  • Недопустимая обратная ссылка с использованием grep
  • как получить список сайтов / доменов, связанных с wirehark
  • Найдите файл в папке1 и выполните сценарий, если этот файл не находится в папке2
  • Перенаправить вывод ошибки grep в файл
  • Как использовать grep или sed для извлечения нескольких совпадений в одной строке
  • Как мне grep и сортировать с помощью этого конкретного шаблона?
  • Sed / Awk - найти строку длиной ровно n символов
  • Linux и Unix - лучшая ОС в мире.