有没有办法将正则表达式与 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
表示当前行的最后一个字段,您也可以根据需要打印它。
我正在尝试编写一个 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
表示当前行的最后一个字段,您也可以根据需要打印它。