我有一个很大的 YAML 文件,其中包含有关视频游戏的信息。
---
-
Name: Metal Gear Solid HD Collection
Console: PS3
Genre: Stealth
Progression: Unplayed
Maintenance: Perfect!
-
Name: Metal Gear Solid 4 Guns of the Patriots
Console: PS3
Genre: Stealth
Progression: Unplayed
Maintenance: Perfect!
-
Name: Metal Gear Rising Revengeance
Console: PS3
Genre: Power Fantasy
Progression: Compleat (Blade Wold DLC to play)
Maintenance: Perfect!
-
我正在尝试将大文件拆分为每个游戏的一个文件。我找到了一个很好的解决方案:
yq e GameCollection.yaml -s .Name
但这会出现以下错误
Error: cannot index array with 'Name' (strconv.ParseInt: parsing "Name": invalid syntax)
我假设这是因为它试图将 Name 视为字符串,因此我将其用单引号引起来,使其更像字符串。我在这里找到了这个解决方案,最高支持答案中的评论让我看到了不同的错误消息并解决了这个问题。
如何将 YAML 拆分为多个具有正确名称的文件
yq e GameCollection.yaml -s '.Name'
这给了我一个不同的错误,我认为这是因为名称不是唯一的标识符,因为有时多个控制台上有相同的游戏(例如 Skyrim)
Error: bad split document expression: 1:1: invalid input text "'.Name'"
我发现,我认为这是一个很好的解决方案,通过添加索引,以便重复的名称可以增加!我在这里找到了解决方案:
yq 分割种类和唯一名称:-s 不保留唯一种类和元数据。名称
yq e GameCollection.yaml -s '.Name + "_" + $index'
但是它给了我一个类似的错误
Error: bad split document expression: 1:1: invalid input text "'.Name"
我又试了几次,因为我想我只是不明白语法
yq e GameCollection.yaml -s '.Name' + "_" + '$index'
Error: bad split document expression: 1:1: invalid input text "'.Name'"
yq e GameCollection.yaml -s '.Name' + "_" + $index
Error: bad split document expression: 1:1: invalid input text "'.Name'"
yq e GameCollection.yaml -s .Name + "_" + '$index'
Error: cannot index array with 'Name' (strconv.ParseInt: parsing "Name": invalid syntax)
几乎就像它不喜欢单引号一样?
如果有人能指出我的方向,请帮助我!
该问题与引号的使用无关。原因要简单得多:您的文件包含单元素数组的文档。所以顶层没有
.Name
,但它是每个数组第一个元素的关键。因此,您需要这样指定:
yq e GameCollection.yaml -s .[0].Name