commit c2b181b
uint
·
2026-08-26 15:34:38 +0000 UTC
parent 0db71b5
sh: speed up json parsing
1 files changed,
+25,
-7
+25,
-7
1@@ -114,15 +114,33 @@ http_get()
2 parse_library_json()
3 {
4 LC_ALL=C awk '
5+ BEGIN {
6+ FS = "},\\{"
7+ }
8+
9 {
10- s = $0
11- while (match(s, /"id":"([^"]+)","path":"([^"]*)"/)) {
12- chunk = substr(s, RSTART, RLENGTH)
13- id = chunk; sub(/^"id":"/, "", id); sub(/","path":"[^"]*"$/, "", id)
14- path = chunk; sub(/^"id":"[^"]+","path":"/, "", path); sub(/"$/, "", path)
15- gsub(/\\"/, "\"", path); gsub(/\\t/, "\t", path); gsub(/\\r/, "", path); gsub(/\\n/, "", path)
16+ for (i = 1; i <= NF; i++) {
17+ chunk = $i
18+
19+ sub(/^\[\{/, "", chunk)
20+ sub(/^\{/, "", chunk)
21+ sub(/\}\]$/, "", chunk)
22+ sub(/\}$/, "", chunk)
23+
24+ id = chunk
25+ sub(/^"id":"/, "", id)
26+ sub(/","path":".*$/, "", id)
27+
28+ path = chunk
29+ sub(/^"id":"[^"]+","path":"/, "", path)
30+ sub(/"$/, "", path)
31+
32+ gsub(/\\"/, "\"", path)
33+ gsub(/\\t/, "\t", path)
34+ gsub(/\\r/, "", path)
35+ gsub(/\\n/, "", path)
36+
37 printf "%s\t%s\n", id, path
38- s = substr(s, RSTART + RLENGTH)
39 }
40 }
41 ' "$1"