cool sed/grep magic to convert output to csv format

2019-03-11 138 words 1 min read

I generallly keep doing this a lot, so thought will share with you. Lets assume we are capturing free ouput every min/hour/or whatever. The output looks like this:

Time: Mon Jan 21 23:59:10 AEDT 2019

total        used        free      shared  buff/cache   available
Mem:          32014        8656        1735        1697       21621       21308
Swap: 51195 75 51120

then we can use some grep and sed to convert this to something like this:

Mon Jan 21 23:59:10 AEDT 2019,32014,8656,1735,1697,21621,21308

This is the code that I used for this:

zgrep -E '^(Time|Mem):' free.20190121.gz |sed -E '/Mem/ s/\s+/,/g'|sed -E 's/^(Time|Mem):\s*//' |sed   ':a;$!N;s/\n//;P'

use zgrep to get the line starting with time or mem
use sed to convert multiple spaces to single space
use sed again to get only the line containing Memory or time
use sed the last time to merge the 2 lines


Authored By Amit Agarwal

Amit Agarwal, Linux and Photography are my hobbies.Creative Commons Attribution 4.0 International License.

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now
This website uses cookies to ensure you get the best experience on our website. Learn more Got it