Over at What keramida said…, Giorgos Keramidas poses an interesting problem. Given the following output from dstat, get rid of the B, k, and M suffixes by converting them into bytes.
----system---- ----total-cpu-usage---- --net/eth0- -dsk/total- sda- time |usr sys idl wai hiq siq| recv send| read writ|util 16-05 08:36:15| 2 3 96 0 0 0| 66B 178B| 0 0 | 0 16-05 08:36:16| 42 14 37 0 0 7| 92M 1268k| 0 0 | 0 16-05 08:36:17| 45 11 36 0 0 7| 76M 1135k| 0 0 | 0 16-05 08:36:18| 27 55 8 0 0 11| 67M 754k| 0 99M|79.6 16-05 08:36:19| 29 41 16 5 0 10| 113M 2079k|4096B 63M|59.6 16-05 08:36:20| 28 48 12 4 0 8| 58M 397k| 0 95M|76.0 16-05 08:36:21| 38 37 14 1 0 10| 114M 2620k|4096B 52M|23.2 16-05 08:36:22| 37 54 0 1 0 8| 76M 1506k|8192B 76M|33.6
Keramidas also wants to do a bit of reformatting of the table, which we’ll ignore for this post. He does the conversion with three invocations of replace-regexp
but given that he titles his post Powerful Regular Expressions Combined with Lisp in Emacs, I thought it would be an interesting challenge to write some Elisp to get rid of those suffixes and convert the entries into bytes.
Obviously, for a one-off task, Keramidas’ solution is the best but if this is something that has to be done regularly a bit of Elisp is just what’s needed. My solution is a Lisp function that converts the table with a single call. Leave your solution in the comments and I’ll post mine in a few days.