有没有办法将正则表达式与 awk 结合使用,仅在模式匹配时才执行命令?

Is there a way to use regex with awk to execute a command only when the pattern is matched?

我正在尝试编写一个 bash 脚本来获取用户输入,检查包含该输入的行的 .txt,然后将其插入 wget 语句以开始下载。

在测试功能时,awk 似乎打印出每一行,而不仅仅是模式匹配的行。

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

以上应该取自imgLink.txt,搜索模式,return找到模式。相反,它打印文件中每一行的第 8 个字段。

我曾尝试将 /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 等等

示例输出:

...

DSC02028.jpg 找到 DSC01985

DSC02030.jpg 发现 DSC01985

DSC02032.jpg 找到 DSC01985

DSC02038.jpg 找到 DSC01985

DSC02042.jpg 找到 DSC01985 等等

您的尝试很接近,您无法搜索像 /var/ 这样的 awk 变量,为此您需要不同的方法。您能否尝试 following.Considering 您想要查看的字符串将出现在您当前 xxx 中 post 的 URL 值中 post.

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

不确定为什么要在 END 块中写 done,如果需要,可以在此处添加。另外 $NF 表示当前行的最后一个字段,您也可以根据需要打印它。