У меня есть файл с потоком объектов JSON следующим образом:Bash с JQ группировкой
{"id":4496,"status":"Analyze","severity":"Critical","severityCode":1,"state":"New","code":"RNPD.DEREF","title":"Suspicious dereference of pointer before NULL check","message":"Suspicious dereference of pointer \u0027peer-\u003esctSapCb\u0027 before NULL check at line 516","file":"/home/build/branches/mmm/file1","method":"CzUiCztGpReq","owner":"unowned","taxonomyName":"C and C++","dateOriginated":1473991086512,"url":"http://xxx/yyy","issueIds":[4494]}
{"id":4497,"status":"Analyze","severity":"Critical","severityCode":1,"state":"New","code":"NPD.GEN.CALL.MIGHT","title":"Null pointer may be passed to function that may dereference it","message":"Null pointer \u0027tmpEncodedPdu\u0027 that comes from line 346 may be passed to function and can be dereferenced there by passing argument 1 to function \u0027SCpyMsgMsgF\u0027 at line 537.","file":"/home/build/branches/mmm/file1","method":"CzUiCztGpReq","owner":"unowned","taxonomyName":"C and C++","dateOriginated":1473991086512,"url":"http://xxx/yyy/zzz","issueIds":[4495]}
{"id":4498,"status":"Analyze","severity":"Critical","severityCode":1,"state":"New","code":"NPD.GEN.CALL.MIGHT","title":"Null pointer may be passed to function that may dereference it","message":"Null pointer \u0027tmpEncodedPdu\u0027 that comes from line 346 may be passed to function and can be dereferenced there by passing argument 1 to function \u0027SCpyMsgMsgF\u0027 at line 537.","file":"/home/build/branches/mmm/otherfile.c","method":"CzUiCztGpReq","owner":"unowned","taxonomyName":"C and C++","dateOriginated":1473991086512,"url":"http://xxx/yyy/zzz","issueIds":[4495]}
Я хотел бы получить с JQ (или каким-либо другим способом), три линии, один для каждого из идентификаторов , URL-адреса, и имя файла:
Это то, что я до сих пор:
cat /tmp/file.json | ~/bin_compciv/jq --raw-output '.id,.url,.file'
Результат:
4496
http://xxx/yyy
/home/build/branches/mmm/file1
.
.
.
НО - Я хотел бы сгруппировать их по имени файла, так что я буду получать через запятую списки адресов и идентификаторов на той же линии, как это:
4496,4497
http://xxx/yyy,http://xxx/yyy/zzz
/home/build/branches/mmm/file1
Лучше для запуска 'jq ... tmp/file.json' или (также полностью POSIX-legal!)'
Это не так важно для jq здесь, но это может иметь большое значение для, скажем, 'sort' - если у него есть реальный дескриптор файла, оптимизированная реализация' sort' может иметь подпроцессы для разных части файла, сортировать компоненты параллельно, а затем выполнять сортировку слияния в родительском процессе; с невозможным для поиска FIFO для ввода вы не можете выполнять такую оптимизацию без непараллелизуемого начального прохода чтения, так как входной поток может быть прочитан только один раз, вперед-назад. –