
Я попал в сложную ситуацию. У меня есть файл, содержимое которого выглядит так:
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 для перехода к строке
решение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 экранирование затруднительно.