我正在执行下面的jq
jq '.backups[] | select(.resource_name == "resource_name") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4
有没有办法用文本文件中的字符串替换 .resource_name 字段,并为 txt 文件中的每一行替换执行 jq
例如,我有 list.txt 文件,其中包含以下内容 苹果 芒果 葡萄
我希望 jq 命令被替换为如下:
jq '.backups[] | select(.resource_name == "**apple**") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4
这可能对你有用(GNU 粘贴和 sed 或并行):
cat <<\! >command.txt
jq '.backups[] | select(.resource_name == "resource_name") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json
!
cat <<\! >list.txt
apple
mango
grape
!
sed -n 'r command.tx' list.txt | paste - list.txt | sed -E 's/".*"(.*)\t(.*)/"**\2**"\1/e'
将 jq 命令放入文本文件中
将列表放入文本文件中。
应用管道 sed/paste/sed 调用。
第一次 sed 调用,创建一个列表长度的命令文件。
调用粘贴,附加由制表符分隔的列表。
第二次调用 sed,使用模式匹配来替换然后评估结果行。
另一个解决方案是使用 GNU 并行:
parallel -k jq '.backups[] | select(.resource_name == "**{}**") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json :::: list.txt