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.

  • Что потребуется, чтобы добавить команду для запуска скрипта при завершении любой заданной случайной задачи?
  • Linux разделяет отдельные файлы на диске, но видит как один
  • Как отменить typo `set -ovi`?
  • Сценарий оболочки для записи выбранных полей в одну строку
  • Как узнать, какая служба работает на конкретном порту в Linux?
  • Строка Grep с определенным словом из файла в определенном столбце
  • Поэтому я написал.

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

  • Как я могу узнать, к какой организации принадлежит специальный инструмент командной строки?
  • Несколько сообщений «-bash command not found» в Mac OS X Snow Leopard Unix
  • Закрытие окна GUI из командной строки
  • Как отправить много команд в оболочку и ждать команды за концами
  • извлечь столбец из большого текстового файла
  • Включение proxy_arp для интерфейса eth2.1
  • 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 - лучшая ОС в мире.