Следующий скрипт Python добавит все файлы, указанные в качестве аргументов, в список недавно -использованных, используя GIO:
#!/usr/bin/python3
import gi, sys
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio, GLib
rec_mgr = Gtk.RecentManager.get_default()
for arg in sys.argv[1:]:
rec_mgr.add_item(Gio.File.new_for_path(arg).get_uri())
GLib.idle_add(Gtk.main_quit)
Gtk.main()
Последние две строки необходимы для запуска цикла событий Gtk; если вы этого не сделаете, измененный сигнал от менеджера не будет обработан, и файлы не будут добавлены в список недавно использованных -.
Отвечая на свой вопрос:
jq 'to_entries|map(.key) as $keys| (map(.value)|transpose) as $values |$values|map([$keys,.] | transpose| map( {(.[0]):.[1]} ) | add)'
Объяснение :Извлечь ключи ["IdentifierName", "Code"] и значения как [ [ "A", 5 ], [ "B", 8 ], [ "C",19 ] ]
Затем, чтобы индексировать от ключей к значениям, возьмите json -последовательность ключа -кортежа с (каждым )значением кортежа, транспонируйте и заархивируйте их попарно.
echo '[[
"IdentifierName",
"Code"
],
[
"C",
19
]
]'|jq '.|transpose| map( {(.[0]):.[1]} ) | add'
Объединение обоих дает решение. Это будет работать для любого количества элементов (0 и 1 — это просто ключ и значение, а не первый и второй ).
$ jq '[.IdentifierName,.Code] | transpose | map( { "IdentifierName":.[0], "Code":.[1] } ) ' file.json
[
{
"IdentifierName": "A",
"Code": 5
},
{
"IdentifierName": "B",
"Code": 8
},
{
"IdentifierName": "C",
"Code": 19
}
]
Я извлекаю два массива в массив (из двух массивов ), которые я транспонирую. Для заданных данных это дает [["A",5],["B",8],["C",19]]
. Затем я сопоставляю каждый отдельный элемент этого массива с объектом с нужными ключами.
Возможно, это можно было бы как-то сделать поаккуратнее. Например, было бы хорошо не реконструировать объекты в конце с явными именами ключей, и было бы также хорошо, если бы можно было обобщить это до n sub -] массивы, а не только два.