awk Поиск петерна, который находится внутри переменной, в файле, который начинается с этого шаблона

Я хочу найти определенный шаблон, который у меня есть внутри переменной, в файле, и этот шаблон должен быть отправной точкой строки для печати строки. Я сделал это с grep здесь:

grep -n "^"$curdate"" ./file

Теперь я хочу сделать то же самое с awk. я сделал это с awk:

awk -v pat="$input" -F ":" '$0~pat{print NR") "$2 }' ./file

Но проблема с приведенным выше awk-кодом заключается в том, что он печатает каждую строку, содержащую шаблон, даже если находит его в середине строки, а не ТОЛЬКО в начале!!

Я думаю, что решение простое, но я не могу найти синтаксис для этого!


person Panagiss    schedule 07.12.2019    source источник


Ответы (1)


Не могли бы вы попробовать следующее, так как нет образцов, поэтому я не могу проверить это, но должно работать. Здесь используется регулярное выражение ^, которое указывает, что мы ищем значение, начинающееся с в каждой строке.

awk -v pat="$input" -F ":" '$0~"^"pat{print NR") "$2 }' ./file

Второе решение. Используя index вариант awk, попробуйте следующее.

awk -v pat="$input" -F ":" 'index($0,pat)==1{print NR") "$2 }'  Input_file

3-е решение. Использование substr метода awk:

awk -v pat="$input" -F ":" 'substr($0,1,length(pat))==var{print NR") "$2 }' Input_file
person RavinderSingh13    schedule 07.12.2019
comment
я сделал первое решение, и ЭТО РАБОТАЕТ большое спасибо - person Panagiss; 07.12.2019
comment
@Psz_13, добро пожаловать, рад, что это помогло вам, я добавил еще 2 решения на случай, если они могут помочь и вам, удачи и счастливого обучения на SO. - person RavinderSingh13; 07.12.2019