Skip to content

Instantly share code, notes, and snippets.

@alanbernstein
Last active December 2, 2019 18:19
Show Gist options
  • Save alanbernstein/a77b07528338afa7808abf71a912c373 to your computer and use it in GitHub Desktop.
Save alanbernstein/a77b07528338afa7808abf71a912c373 to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"encoding/json"
"fmt"
"log"
"os"
"github.com/olekukonko/tablewriter"
)
func main() {
/*
in:
{"region": "China", "sales_channel": 0, "count": 11863, "sum": 0}
{"region": "China", "sales_channel": 1, "count": 11433, "sum": 0}
assumes all rows have same string keys
out:
| count | sales_channel | region | sum |
----------------------------------------
| 11863 | 0 | China | 0 |
| 11433 | 1 | China | 0 |
*/
var header []string
var data map[string]interface{}
table := tablewriter.NewWriter(os.Stdout)
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
line := scanner.Text()
if err := json.Unmarshal([]byte(line), &data); err != nil {
log.Println(err)
}
if len(header) == 0 {
for k := range data {
header = append(header, k)
}
}
var row []string
for _, k := range header {
switch data[k].(type) {
case float64:
row = append(row, fmt.Sprintf("%d", int64(data[k].(float64))))
default:
row = append(row, fmt.Sprintf("%v", data[k]))
}
}
table.Append(row)
}
if err := scanner.Err(); err != nil {
log.Println(err)
}
table.SetHeader(header)
table.Render() // Send output
}
#!/usr/bin/env python
import sys
import json
"""
in:
{"region": "China", "sales_channel": 0, "count": 11863, "sum": 0}
{"region": "China", "sales_channel": 1, "count": 11433, "sum": 0}
assumes all rows have same string keys
out:
| count | sales_channel | region | sum |
----------------------------------------
| 11863 | 0 | China | 0 |
| 11433 | 1 | China | 0 |
"""
f = sys.stdin
# fin = 'vdsm_output.txt'
# f = open(infile)
data = []
for line in f:
data.append(json.loads(line))
num_columns = len(data[0])
headers = list(data[0].keys())
column_width = {k: len(k) for k in headers}
for k in headers:
data_width = max([len(str(r[k])) for r in data])
column_width[k] = max(column_width[k], data_width)
fmts = {k: ' %%%ds ' % v for k, v in column_width.items()}
header_cells_padded = [v % k for k, v in fmts.items()]
header_line = '|'.join([''] + header_cells_padded + [''])
print(header_line)
print('-' * len(header_line))
for row in data:
row_cells_padded = [v % row[k] for k, v in fmts.items()]
line = '|'.join([''] + row_cells_padded + [''])
print(line)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment