diff --git a/jc/jc.py b/jc/jc.py index 7a1fb0b5..d0e1d56e 100755 --- a/jc/jc.py +++ b/jc/jc.py @@ -7,6 +7,7 @@ Main input module import sys import signal import json +import jc.parsers.arp import jc.parsers.df import jc.parsers.env import jc.parsers.free @@ -30,6 +31,7 @@ import jc.parsers.w def helptext(): print('Usage: jc PARSER [OPTIONS]\n', file=sys.stderr) print('Parsers:', file=sys.stderr) + print(' --arp arp parser', file=sys.stderr) print(' --df df parser', file=sys.stderr) print(' --env env parser', file=sys.stderr) print(' --free free parser', file=sys.stderr) @@ -74,7 +76,10 @@ def main(): pretty = True # parsers - if '--df' in sys.argv: + if '--arp' in sys.argv: + result = jc.parsers.arp.parse(data) + + elif '--df' in sys.argv: result = jc.parsers.df.parse(data) elif '--env' in sys.argv: diff --git a/jc/parsers/arp.py b/jc/parsers/arp.py new file mode 100644 index 00000000..a2646acf --- /dev/null +++ b/jc/parsers/arp.py @@ -0,0 +1,22 @@ +"""jc - JSON CLI output utility arp Parser + +Usage: + specify --arp as the first argument if the piped input is coming from arp + +Example: + +$ arp | jc --arp -p + +""" + + +def parse(data): + + # code adapted from Conor Heine at: + # https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501 + + cleandata = data.splitlines() + headers = [h for h in ' '.join(cleandata[0].lower().strip().split()).split() if h] + + raw_data = map(lambda s: s.strip().split(None, len(headers) - 1), cleandata[1:]) + return [dict(zip(headers, r)) for r in raw_data]