Last active
December 2, 2019 18:19
-
-
Save alanbernstein/a77b07528338afa7808abf71a912c373 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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