将文件拆分为两个变量以通过管道传输到一个命令

将文件拆分为两个变量以通过管道传输到一个命令

我有一个 JSON 对象。它有两个字段;{ href: string, filename: string }。我想从 href 下载一个文件,并将其名称设置为$FILENAME.pdf.这是循环发生的

我怎样才能做到这一点?最好没有循环,因为我总是必须查找语法。

我正在想象这样的事情:cat files.json | jq-like-splitter '.href' '.filename' | wget $HREF -o $FILENAME.pdf

答案1

您可以使用xargs并启动一个小型 shell 脚本:

jq -r '.href, .filename' file.json | xargs -n2 sh -c 'wget "$1" -O "$2"' sh

请注意,wget-o选项适用于日志文件和-O“输出文档”。

答案2

与解决方案类似xargs,但使用parallel.
它认为它更优雅,因为它不需要管道和额外的sh调用。

parallel -n2 wget {1} -O {2} ::: "$(jq -r '.href, .filename' file.json)"

答案3

我不知道 Linux 上的 jq-splitter,但您可以使用 sed 来拆分字段,将输出读取到变量中,然后运行 ​​wget。

$> read HREF FILENAME < <(sed -r 's/(.*href:[ ]*)([^, ]*)(.*filename:[ ]*)([^, ]*)(.*)$/\2 \4/' files.json);wget "${HREF}" -o "${FILENAME}.pdf"

使用sed-r选项打开正则表达式,创建捕获组来解析 href 之前的所有内容,然后获取其值。然后获取文件名之前的所有内容并获取其值。打印捕获组 1 和 4 的空格分隔输出。

这些值被读入HREFFILENAME,然后分号启动一个单独的命令以使用存储的值运行 wget 。

相关内容