On 2022-04-27 10:21, Bernhard Voelker wrote: > Regarding the postprocess solution: > this is a little awk(1) snippet to get the same output as with the patch: > > $ factor 13 36 | tr ' ' '\n' | uniq -c | awk '\ > BEGIN { n="" } > /:$/ { printf("%s%s", n, $2); n="\n"; next }; > { printf(" %s%s", $2, ($1>1?"^"$1:"")); } > END {printf("%s",n); } > ' > 13: 13 > 36: 2^2 3^2
All in awk: factor 13 36 65536 | awk ' { printf "%s", $1 for (i = 2; i <= NF + 1; i++) { if ($i"" == fac) { count++ } else { if (fac) { printf " %s", fac if (count > 1) printf "^%s", count } fac = $i count = 1 } } print "" }' 13: 13 36: 2^2 3^2 65536: 2^16 There is always: factor 13 36 65536 | txr -e ' (while-match `@num: @facs` (get-line) (put-line `@num: @(flow facs (spl " ") (partition-by identity) (mapcar [juxt first len]) (mapcar (ado if (> @2 1) `@1^@2` `@1`)))`))' 13: 13 36: 2^2 3^2 65536: 2^16 I needed a "core util" like this, so I made one. :)