如何用Bash遍历CSV两列调用bulk-bing-image-downloader爬取图片
实现方案
方案1:Bash 原生循环(推荐,易调试修改)
适合不熟悉awk语法的场景,代码如下:
#!/bin/bash # 逐行读取CSV文件,按逗号拆分字段 while IFS=, read -r keyword folder search || [ -n "$keyword" ]; do # 跳过表头行 [ "$keyword" = "keyword" ] && continue # 仅search值为1时执行下载 if [ "$search" -eq 1 ]; then echo "当前下载关键词:$keyword,存储目录:$folder" ./bbid.py -s "$keyword" --limit 10 --adult-filter-off -o "$folder" fi done < test.csv
使用说明:
- 变量包裹双引号,避免关键词/文件夹名带空格、特殊符号时参数解析错误
- 末尾的
|| [ -n "$keyword" ]兼容CSV最后一行无换行符的场景,不会漏读最后一行数据
方案2:Awk 实现
修正你原有awk脚本的错误后的代码如下:
awk ' BEGIN { FS = "," FPAT = "([^,]+)|(\"[^\"]+\")" } # 跳过表头 + search值为1才执行 NR > 1 && $3 == 1 { cmd = sprintf("./bbid.py -s \"%s\" --limit 10 --adult-filter-off -o \"%s\"", $1, $2) print "执行命令:" cmd system(cmd) } ' test.csv
修正点说明:
- 原有
-F,写法错误,改为在BEGIN块内定义FS = ","指定分隔符 - awk内不能直接执行shell命令,需通过
system()函数调用 - 新增
$3 == 1的判断逻辑,符合跳过search=0行的需求 - 替换输出目录参数为第二列的folder值,而非原有错误的复用keyword列
内容的提问来源于stack exchange,提问作者Dai
相关产品推荐
相关产品推荐

