Использование .id
как части имени файла сопряжено с риском.
Во-первых, существует потенциальная проблема встроенных символов новой строки.
Во-вторых, существует проблема «зарезервированных» символов, особенно «/».
В-третьих, Windows имеет многочисленные ограничения на имена файлов — см., например. https://gist.github.com/doctaphred/d01d05291546186941e1b7ddc02034d3.
Кроме того, если используется параметр jq -r, как предлагается в другом сообщении на этой странице, то значения .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);}
'
Обратите особое внимание на использование «>>», чтобы избежать потери данных в случае конфликта имен файлов.
person
peak
schedule
16.05.2019