Dans l’étape précédente, on a extrait les messages dans plusieurs fichiers pour éviter de surcharger notre workflow de scraping.
Maintenant il nous faut rassembler et classer tout ça pour pouvoir l’exploiter de manière optimale.
Fusionner des 100aines de messages à la main, merci mais non merci ! Habituellement j’utilise n8n pour faire ce genre d’opérations automatiquement, mais là avec 15mo de pur texte ça fait facilement lagger l’interface…
Alors en demandant à Perplexity un moyen de faire ça rapidement sur mon Mac, j’ai découvert la commande jq à utiliser dans mon terminal !
![]()
Alors je sais, le terminal ça peut faire peur… Mais aujourd’hui avec notre copilote ChatGPT, ça se résume à ouvrir une appli, à poser des questions à GPT, et à copier-coller ses réponses : autant dire que n’importe qui en est capable ! (cf mon échange avec Perplexity pour récupérer les commandes)
easiest way to combine several json files of arrays in one
J’ai pris soin de bien exporter les messages dans des fichiers JSON commençant tous par b2b_discord_export_
Pour faciliter l’analyse à venir, on va grouper l’ensemble des messages d’abord par salon, puis par topic.
Un topic, c’est le nom d’un post dans le cas des salons type forum. Pour les salons chats, les messages seront groupés dans un topic nommé “regular”.
Il me suffit d’utiliser la commande suivante sur mon terminal :
jq -s '
# First normalize input to array of valid objects
[.[][] | select(type == "object" and has("channel"))] |
# Then perform grouping
group_by(.channel) |
map({
key: .[0].channel,
value: (
group_by(.topic_id | if . == "" or . == null then "regular" else . end) |
map({
key: (.[0].topic_id // "regular"),
value: .
}) |
from_entries
)
}) |
from_entries' b2b_discord_export_*.json > messages_groupby_topic.json
<aside> 💡
Je te recommande de regrouper tous tes fichiers dans un même dossier, c’est plus pratique d’ouvrir le terminal au bon endroit si tu n’y es pas familier

</aside>
Les salons chats peuvent contenir énormément de messages en un bloc “regular”, on va donc les découper en topic par jour où ils ont été postés
jq 'with_entries(
.value |=
if has("regular") then
(.regular
| group_by(.timestamp[0:10])
| map({ (.[0].timestamp[0:10]) : sort_by(.timestamp) })
| add)
else
.
end
)' messages_groupby_topic.json > chat_groupby_day_sorted.json
on fait des paquets d’un nombre maximum de 1000 messages pour pouvoir les analyser facilement