循环遍历 csv 中的两列以使用 bash 中的 bulk-bing-image-downloader 抓取图像

Loop through two columns in csv to scrape images using bulk-bing-image-downloader in bash

我正在尝试使用 bulk-bing-image-downloader 抓取 bing 个图像。我有一个包含关键字和文件夹名称的 csv 文件,我希望在其中保存图像:

keyword,folder,search
dog's house,animal,1
book.end,read,0
key chains,house,1

我想使用keywordfolder下的值作为参数来搜索和下载图片,search下的值作为条件语句,如果它为 1,则代码执行搜索,但如果为 0,则不执行搜索。基本的 bulk-bing-image-downloader 代码为:

./bbid.py -s "keyword" --limit 10 --adult-filter-off -o "folder"

其中 keywordfolder 是我想遍历 csv 文件中每一行的地方。我目前将 bash 命令设置为,但我是 shell 命令的超级新手,对 awk 的工作原理一无所知。求助?:

awk '
BEGIN {
    -F,
    FPAT = "([^,]+)|(\"[^\"]+\")"
}
{
  if ( != "keyword") {
    printf("%s\n", )
    ./bbid.py -s  --limit 10 --adult-filter-off -o 
  }
}
' test.csv

既然您提到您对 awk 的工作原理一无所知 - 请获取 Arnold Robbins 撰写的“Effective AWK Programming”第 5 版一书,它将教您如何使用 AWK。不过,根据您发布的命令,您需要理解的最重要的事情是:awk 不是 shell。 awk 和 shell 是两种完全不同的工具,具有完全不同的用途和它们自己的语法、语义和范围。 Awk 是一个用于处理文本的工具,而 shell 是一个用于 creating/destroying 文件和进程以及对工具调用排序的工具。 awk 是发明 shell 的人也为 shell 发明的在需要操作文本时调用的工具。

这个 shell 脚本可能就是您要执行的操作:

while IFS=',' read -r k f _; do
    echo ./bbid.py -s "$k" --limit 10 --adult-filter-off -o "$f"
done < <(tail -n +2 file)
./bbid.py -s dog's house --limit 10 --adult-filter-off -o animal
./bbid.py -s book.end --limit 10 --adult-filter-off -o read
./bbid.py -s key chains --limit 10 --adult-filter-off -o house

完成初始测试后删除 echo