Использование .id
в качестве части имени файла сопряжено с риском.
Во-первых, существует потенциальная проблема встроенных символов новой строки.
Во-вторых, существует проблема «зарезервировано»."символы, в частности" /".
В-третьих, Windows имеет многочисленные ограничения на имена файлов - см., например, https://gist.github.com/doctaphred/d01d05291546186941e1b7ddc02034d3).
Кроме того, если используется опция -r jq, как предложено в другомпосле публикации на этой странице значения .id "1"
и 1
будут сопоставлены с 1
, что приведет к потере данных, если в awk используется «>».
Так что здесьпредставляет собой решение, иллюстрирующее, как можно достичь безопасности в среде OS X или * ix, и которое имеет большое значение для безопасного решения для Windows:
jq -c '.[]
| (.id | if type == "number" then .
else tostring | gsub("[^A-Za-z0-9-_]";"+") end), .' |
awk '
function fn(s) { sub(/^\"/,"",s); sub(/\"$/,"",s); return s ".json"; }
NR%2{f=fn($0); next}
{print >> f; close(f);}
'
Обратите особое внимание на использование «>>» дляизбегать потери данных в случае конфликтов имен файлов.