LINUX.ORG.RU

Как правильно проитерировать ноды в yq?

 ,


0

1

В общем мне нужно поиспользовать yq + bash. В баше мне нужно сделать цикл, чтобы в каждой итерации произвести над данными какие-то действия. Есть ноды(несколько):

- name1: "some_name1_text"
  some1_1: "some1_1_text1
  some1_2: "some1_2_text2 

- some_node2: "some_node2_1_text"
  some2_1: "some2_1_text1
  some2_2: "some2_2_text2 
...

- xxx: "xxx_text"
  some2_1: "some2_1_text1
  some2_2: "some2_2_text2 

Т.е нужно проитерироваться по «name1», «some_node2», «xxx» и внутри каждой итерации получить имена «key» «value» содержимого ноды. Как правильно это сделать?

★★★★

Последнее исправление: serg002 (всего исправлений: 2)
source_data() {
cat<<EOF
- name1: "some_name1_text"
  some1_1: "some1_1_text1"
  some1_2: "some1_2_text2"
- some_node2: "some_node2_1_text"
  some2_1: "some2_1_text1"
  some2_2: "some2_2_text2" 
- xxx: "xxx_text"
  some2_1: "some2_1_text1"
  some2_2: "some2_2_text2" 
EOF
} 

parse() {
  local index=0
  while source_data | yq ".[$index]" -e > /dev/null 2>&1; do
    echo "Item $index:"
    source_data | yq ".[$index]"
    ((index++))
  done
}

source_data | yq | parse
gagarin0
()

Как правильно это сделать?

Правильно не использовать древние костыли из семидесятых, а переходить на нормальные инструменты. Т.е. на бабашку.

user> (def data-file "/tmp/data.yml")
#'user/data-file
user> (def data (-> data-file
                    slurp
                    yaml/parse-string))
#'user/data
user> data
({:name1 "some_name1_text",
  :some1_1 "some1_1_text1",
  :some1_2 "some1_2_text2"}
 {:some_node2 "some_node2_1_text",
  :some2_1 "some2_1_text1",
  :some2_2 "some2_2_text2"}
 {:xxx "xxx_text",
  :some2_1 "some2_1_text1",
  :some2_2 "some2_2_text2"})
user> (doseq [node data]
        (println "---")
        (doseq [[k v] node]
          (println k v)))
---
:name1 some_name1_text
:some1_1 some1_1_text1
:some1_2 some1_2_text2
---
:some_node2 some_node2_1_text
:some2_1 some2_1_text1
:some2_2 some2_2_text2
---
:xxx xxx_text
:some2_1 some2_1_text1
:some2_2 some2_2_text2
nil
ugoday ★★★★★
()
Ответ на: комментарий от i-rinat

Ты же по сути просишь за тебя ман прочитать и рассказать. LLM чатботы с таким как раз хорошо справляются

Вот именно с таким они справляются хреново. Они очень часто начинают нести радостную хрень которая не имеет ничего общего с реальностью, даже когда спрашиваешь их конкретно по ману. Вот прям вчера пытался вытащить из Gemini что будет если в андроидный биллинг скормить несколько sku разом - ответы разных версий были тупо полярными, при чем совсем, от «да конечно можно» до «нельзя вообще никак»

upcFrost ★★★★★
()