8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

YQ-如果匹配列表中的至少一个元素,如何按字段值过滤数组

user25653727 3月前

166 0

具体来说(https://github.com/mikefarah/yq)4.35+我有一个以逗号分隔的术语字符串,并且如果字段值是其中一个术语,我想过滤列表。例如)给定以下输入:-

具体来说 https://github.com/mikefarah/yq https://github.com/mikefarah/yq)4.35+

我有一个以逗号分隔的术语字符串,如果字段值是这些术语之一,我想过滤列表。

例如)给定以下输入:

- name: bob
  age: 12
- name: jen
  age: 22
- name: mork
  age: 4003

字段值作为子字符串存在的 name 元素 "jen,mork" 使得输出为:

- name: jen
  age: 22
- name: mork
  age: 4003

我还可以将这些术语表示为字符串数组,即 ["jen", "mork"]

因此相当于:

yq 'filter("jen,mork" | contains(.name))' array.yaml
# Though I'm not sure how `contains` gets the original array context
# or
yq 'filter(.name in ["jen", "mork"])' array.yaml

我意识到这可以通过构建一个集合来完成 or ,如下所示:

yq 'filter(.name == "jen" or .name == "mork"])' array.yaml

但我希望得到一些更优雅的东西。

我不太确定该尝试什么,因为这似乎与操作员想要的工作方式背道而驰。

帖子版权声明 1、本帖标题:YQ-如果匹配列表中的至少一个元素,如何按字段值过滤数组
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user25653727在本站《arrays》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我有一个 AVD,我正在尝试为 intune 中的用户在键盘上添加一种语言。我尝试创建一个平台脚本和补救脚本,但它并没有给我想要添加的语言……

    我有一个 AVD,并且我也想为 intune 中的用户在键盘上添加一种语言。我尝试创建一个平台脚本和补救脚本,但它并没有给我我想要的功能,即为登录到 avd 的用户在键盘上添加一种语言,是否有一个策略或其他我可以做的事情来将它添加到用户的键盘上。

    我知道如何在 gpo 中执行此操作,例如添加添加所需语言的注册表值的策略,但如何在 intune 中执行此操作

  • 当我尝试制作一个包并在 Flask 应用程序中使用它时出现此错误。我尝试了所有方法,从切换到更稳定的 OpenAI 版本到重建我的应用程序。似乎没有任何效果...

    当我尝试制作一个包并在 Flask 应用程序中使用它时出现此错误。

    我尝试了所有方法,从切换到更稳定的 openai 版本到重建我的应用程序。但似乎都不起作用。请帮忙!!!

  • 我想将 Azure blob 内容复制到本地服务器https:// /prod/backup/node1 -> f:\backup\clusterhttps:// /prod/备份/node2/ /森林/* -> f:\b...

    我想要将 Azure blob 内容复制到本地服务器

    https://<blob>/prod/backup/node1 -> f:\backup\cluster
    https://<blob>/prod/backup/node2/<RandomFolderName>/forests/* -> f:\backup\cluster\forests
    https://<blob>/prod/backup/node3/<RandomFolderName>/forests/* -> f:\backup\cluster\forests
    

    我希望服务器上的最终文件夹结构是:

    f:\backup\cluster\
    f:\backup\cluster\forests\<forest2-content-folder>
    f:\backup\cluster\forests\<forest3-content-folder>
    
  • 我有 2 个数组:var array1 = [{\'name\':\'abc\', \'url\':\'http:://example1.com\'},{\'name\':\'cde\', \'url\':\'http:://example2.com&qu...

    我有2个数组:

    var array1 = 
    [{"name":"abc", "url":"http:://example1.com"},
    {"name":"cde", "url":"http:://example2.com"},
    {"name":"fgh", "url":"http:://example3.com"}];
    
    var array2 = 
    [{"id":"1", "url":"http:://example1.com"},
    {"id":"2", "url":"http:://example2.com"}]; 
    

    我想用仅在 array2 中的 url 值来过滤 array1,但不知道如何做。

    感谢 VLAZ 关于数组定义。(我以为我的示例是二维数组)。

    我已经知道了多对象项数组 2,我将减少数组 2 的方法应用于新数组。但我想进一步了解如何直接从包含多对象项的 2 个数组中进行筛选。

    let array2b = array2.reduce((acc, cur) => [...acc, cur.url], []);
    var filtered = array1.filter(item => array2b.includes(item.url));
    

    编辑:我花了一天时间搜索,但没想到它会在这里: 使用另一个对象数组过滤对象数组 。抱歉

  • 就目前的情况来看,您的答案不够清晰。请编辑以添加更多详细信息,帮助其他人了解此内容如何解决所提问题。您可以在帮助中心找到有关如何撰写良好答案的更多信息。

  • 感谢您联系我们并报告此问题。

    首先,请通过运行以下命令检查 OpenAI 的当前版本:

    pip 冻结 | grep openai

    请卸载现有的OpenAi版本并安装OpenAi版本 0.28.1 包并重新测试?

    pip 安装 openai==0.28.1

    如果有帮助的话, 请分享 类似线程

  • JDev 3月前 0 只看Ta
    引用 8

    您可以使用 Intune 的修复脚本功能来部署将添加语言的脚本。有关实际脚本的更多详细信息,请查看此类似问题: 如何在 Windows 10 中仅设置键盘语言/布局?

    您可以将其部署为补救脚本。有关更多信息,请参阅: https://learn.microsoft.com/en-us/mem/intune/fundamentals/remediations

    如果这没有帮助,请随意添加评论!

  • 请在您使用的解决方案中添加脚本来改进答案,并接受该解决方案,这将对社区中的其他人们有所帮助。

  • 引用 10

    @DucMinh 不用客气。当然!最好的学习方法是通过实际编码来探索不同的选项。顺便提一下,.reduce 不适合在这种情况下使用,因为您没有使用任何整数来计算或累积。

  • 引用 11

    我最终创建了一个 PowerShell 脚本来执行 AzCopy 后任务来重组文件夹

  • 太棒了,这正是我想要的。我刚刚了解了数组。它工作得很好。虽然我这样做也产生了结果,但我想只使用过滤器,而不是用 Reduce 函数重新创建数组。非常感谢!!!

  • /prod/备份/node2/321f6c93-cb2b-4029-bfc7-7995d584f8db/森林/*/forests/* 例如 https://感谢@Venkatesan 的回复。我的问题是源 URL:node2 和 3 具有随机 GUID,但我想定位来自 \'forest\' 文件夹的所有内容。不确定如何用通配符 () /node2/ 替换 GUID/森林/ /节点3/

  • ES6 JavaScript 中有几种方法可以轻松做到这一点:您可以使用 .filter .some 方法。

    对于您来说,您可以按如下方式格式化它:

    var array1 = 
    [{"name":"abc", "url":"http:://example1.com"},
    {"name":"cde", "url":"http:://example2.com"},
    {"name":"fgh", "url":"http:://example3.com"}];
    
    var array2 = 
    [{"id":"1", "url":"http:://example1.com"},
    {"id":"2", "url":"http:://example2.com"}]; 
    
    let filteredArray = array1.filter(firstItem => array2.some(secondItem => secondItem.url === firstItem.url)
    

    说明:该 filter 方法将允许您创建一个包含满足特定条件的元素的新数组,并 some 允许类似检查系统的方式查看 array2 中是否至少有一个元素具有与 array1 中的当前元素相同的 url。

    因此,实际上,代码允许对 array1 进行过滤,以仅包含其 url 存在于 array2 中的对象。

    您可以阅读有关这两种方法的更多信息,以获得更普遍的理解,但这就是它们在您的案例中的用途。

    希望这可以帮助。

  • 将 Azure blob 内容复制到具有特定结构的本地服务器

    您可以使用 Azcopy 工具将 Azure Blob 内容复制到具有特定结构的本地服务器来实现此目的。

    命令如下:

    azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node1/*?<Your-sas-token>" "C:\backup\cluster" --recursive=true
    
    azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node2/results/forests/*?<Your-sas-token>" "C:\backup\cluster\forests" --recursive=true
    
    azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node3/example/forests/*?<Your-sas-token>" "C:\backup\cluster\forests" --recursive=true
    

    命令和输出:

    PS C:\Users\xxxx> azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node1/*?<Your-sas-token>" "C:\backup\cluster" --recursive=true
    INFO: Scanning...
    INFO: azcopy.exe 10.22.2: A newer version 10.25.1 is available to download
    
    INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
    
    Job ea769875-1zzzd3e0c7ef4 has started
    Log file is located at: C:\Users\zzzz.azcopy\ea7698xxx-884d-5166-71ad3e0c7ef4.log
    
    100.0 %, 3 Done, 0 Failed, 0 Pending, 0 Skipped, 3 Total, 2-sec Throughput (Mb/s): 0.0633
    
    
    Job ea769875-15zzzzsummary
    Elapsed Time (Minutes): 0.0334
    Number of File Transfers: 3
    Number of Folder Property Transfers: 0
    Number of Symlink Transfers: 0
    Total Number of Transfers: 3
    Number of File Transfers Completed: 3
    Number of Folder Transfers Completed: 0
    Number of File Transfers Failed: 0
    Number of Folder Transfers Failed: 0
    Number of File Transfers Skipped: 0
    Number of Folder Transfers Skipped: 0
    TotalBytesTransferred: 15823
    Final Job Status: Completed
    
    PS C:\Users\zzzz>  azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node2/results/forests/*?<Your-sas-token>" "C:\backup\cluster\forests" --recursive=true
    
    INFO: Scanning...
    INFO: azcopy.exe 10.22.2: A newer version 10.25.1 is available to download
    
    INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
    
    Job 3b63fezzzzz9c50ce has started
    Log file is located at: C:\Users\zzz\.azcopy\3b63xxxxxf-0445-4e19-c116a29c50ce.log
    
    100.0 %, 4 Done, 0 Failed, 0 Pending, 0 Skipped, 4 Total, 2-sec Throughput (Mb/s): 0.0396
    
    
    Job 3b63fe9d-czzz29c50ce summary
    Elapsed Time (Minutes): 0.0335
    Number of File Transfers: 4
    Number of Folder Property Transfers: 0
    Number of Symlink Transfers: 0
    Total Number of Transfers: 4
    Number of File Transfers Completed: 4
    Number of Folder Transfers Completed: 0
    Number of File Transfers Failed: 0
    Number of Folder Transfers Failed: 0
    Number of File Transfers Skipped: 0
    Number of Folder Transfers Skipped: 0
    TotalBytesTransferred: 9940
    Final Job Status: Completed
    
    PS C:\Users\zzz> azcopy copy "https://venkat326123.blob.core.windows.net/prod/backup/node3/example/forests/*?<Your-sas-token>" "C:\backup\cluster\forests" --recursive=true
    INFO: Scanning...
    INFO: azcopy.exe 10.22.2: A newer version 10.25.1 is available to download
    
    INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
    
    Job 176d8769-bec9-184zzzc9 has started
    Log file is located at: C:\Users\zzzzu\.azcopy\176zzec9-1846-zz.log
    
    100.0 %, 3 Done, 0 Failed, 0 Pending, 0 Skipped, 3 Total, 2-sec Throughput (Mb/s): 0.5394
    
    
    Job 176d8769zzcf46a460c9 summary
    Elapsed Time (Minutes): 0.0336
    Number of File Transfers: 3
    Number of Folder Property Transfers: 0
    Number of Symlink Transfers: 0
    Total Number of Transfers: 3
    Number of File Transfers Completed: 3
    Number of Folder Transfers Completed: 0
    Number of File Transfers Failed: 0
    Number of Folder Transfers Failed: 0
    Number of File Transfers Skipped: 0
    Number of Folder Transfers Skipped: 0
    TotalBytesTransferred: 135843
    Final Job Status: Completed
    

    在 Cluster 文件夹中:

    enter image description here

    在森林文件夹中:

    enter image description here

    参考: azcopy copy | Microsoft Learn

  • C.K. 3月前 0 只看Ta
    引用 16

    措辞实际上是 jq 术语(mikefarah/yq 受其启发),但即使在那里,该术语也含糊不清。请查看他们关于逗号运算符的文档和 yq 关于联合运算符的文档。

  • 非常感谢!我以为这是一个简单的解决方案,但我在文档中找不到任何东西……现在仍然找不到。这是在文档中搜索 \'stream\' 时出现的结果:mikefarah.gitbook.io/yq/usage/...。如果您知道文档中讨论过这个问题的地方,请留下链接。再次感谢!

  • 只需构建一个流,比较就会自动迭代其项目:

    yq 'filter(.name == ("jen", "mork"))' array.yaml
    

    要导入列表,请使用环境变量并 env 访问它:

    list='["jen", "mork"]' yq 'filter(.name == (env(list) | .[]))' array.yaml
    

    使用 yq v4.44.2,您可以缩短为 .name == env(list)[] .

    输出:

    - name: jen
      age: 22
    - name: mork
      age: 4003
    
返回
作者最近主题: