Есть ли способ использовать регулярное выражение с awk для выполнения команды только при совпадении с шаблоном? - PullRequest
0 голосов
/ 27 мая 2020

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

При тестировании функциональности awk, кажется, распечатывает каждую строку, а не только строки, совпадающие с шаблоном.

chosen=DSC01985
awk -v c="$chosen" 'BEGIN {FS="/"; /c/}
{print  $8, "found", c}
END{print " done"}' ./imgLink.txt

Приведенное выше должно быть взято из imgLink.txt, найдите шаблон и верните, что образец найден. Вместо этого он печатает восьмое поле каждой строки файла.

Я попытался переместить / c / из оператора begin, но безрезультатно.

что здесь происходит?

Пример ввода:

https://xxxx/xxxx/xxxx/xxxx/xxx/DSC01533.jpg

https://xxxx/xxxx/xxxx/xxxx/xxx/DSC01536.jpg

https://xxxx/xxxx/xxxx/xxxx/xxx/DSC01543.jpg

https://xxxx/xxxx/xxxx/xxxx/xxx/DSC01558.jpg

https://xxxx/xxxx/xxxx/xxxx/xxx/DSC01565.jpg et c.

Пример вывода:

...

DSC02028.jpg найдено DSC01985

DSC02030.jpg найдено DSC01985

DSC02032.jpg найдено DSC01985

DSC02038.jpg найдено DSC01985

DSC02042.jpg найдено DSC01985 et c.

1 Ответ

4 голосов
/ 27 мая 2020

Вы были близки к своей попытке, вы не можете искать переменную awk, например /var/, вам нужен другой метод для этого. Не могли бы вы попробовать следующее. Принимая во внимание, что ваша строка, которую вы хотите просмотреть, будет иметь значение (я) URL, которые вы в настоящее время xxx указали в своем сообщении.

awk -v c="$chosen" -F'/' '$0 ~ c{print $NF " found " c}' Input_file

Не уверен, почему вы написали done в вашем блоке END, вы можете добавить его сюда, если вам это нужно. Также $NF означает последнее поле текущей строки, которое вы тоже можете распечатать по своему усмотрению.

...