Scrapboxのjsonから文字数の分布を可視化する
のりしろ
結論
以下のフォーマットのjsonに対してjqを使ってlines要素のそれぞれの文字列カウントをするzshで動く
ワンライナーを書いてください
zsh{"name":"motoso","displayName":"基素基","exported":1678366154,"pages":[
{"title":"静電気","created":1670703682,"updated":1678360502,"id":"6394e9df54326b001e527fdd","lines":["静電気","https://guard.lion.co.jp/eleguard/coordinate/","[https://gyazo.com/620808bd024d650421fa02cf22ac6ec3]","","[アクリル]と[ナイロン]が混じってる服が帯電するのはこのせいか","","それぞれの極性に[帯電]しやすい物質の順番を示した[帯電列]","https://www.achilles.jp/product/electronics/knowledge/static-electricity/#:~:text=物質によってプラスに帯電,ということになります%E3%80%82","[https://gyazo.com/3137ff28d09f699d16e780b1ddace87d]","",""]},
{"title":"公開読書","created":1678354135,"updated":1678354410,"id":"6409a6d4a45c78001cfb51ab","lines":["公開読書","読書の感想文や自分の言葉でのまとめを公開でやる読書"," ここで公開とは、他人の意見がもらえる場所=他人の目につく場所ってこと","ねらい"," [インターネットは他人が自分の誤解を訂正してくれるかもしれない]"," [口コミ]で他人が興味を持ってその本を買えば著者にも還元される","","[アクティブ読書]のように著作物をそのまま掲載はしない"," 引用の要件を満たせない"," [自分がされたら嫌]だ",""]},
]}
```
ただし、linesの各要素の文字列は1つに結合してください
cat data.json | jq -r '.pages[].lines | map(select(. != "")) | join(" ")' | wc -w
cat data.jsonでjsonファイルを読み込みます。
jq -r '.pages[].lines | map(select(. != "")) | join(" ")'
で、各ページのlines要素を取得し、空文字列を除外して、それぞれの文字列を半角スペースで結合します。ここで、-rオプションを指定することで、文字列を生の形式で出力します。
wc -w
で、全体の単語数を数えます。これにより、各ページのlines要素の文字列カウントが求められます。
これだと全部になっちゃうので1行ごとにカウントしてほしい

$ cat data.json | jq -r '.pages[].lines | map(select(. != "")) | map(length) | @csv' | sed 's/"//g'
うーん。これだと各要素が結合されないぞ


各lines要素は結合した上で文字数を数えてください
$ cat data.json | jq -r '.pages[].lines | map(select(. != "")) | join("") | length'
良さそう


これらで得られた文字数のヒストグラムをshellに出したいです。区間は1000ごとにしてください。ワンライナーでお願いします
$ cat data.json | jq -r '.pages[].lines | map(select(. != "")) | join("") | length' | awk '{x[int($1/1000)]++} END {for (i in x) {printf "%d-%d: %d\n", i*1000, (i+1)*1000-1, x[i]}}' | sort -n
分布を見た感想

69000文字以上の記事がある...なに?
minifyしたコードかな?
0.2%ぐらいが8000字を超える