如何将脚本Terminal输出转换为规范表格格式的CSV文件?
终端输出转结构化CSV表格的实现方法
原始终端输出
File searched is xyz fie found at line number 09 "key": "name", "value": "Ramesh" "Key": "contact num", "value": "1234"
期望输出的CSV表格
| File name | Line number | name | contact num |
|---|---|---|---|
| xyz | 09 | Ramesh | 1234 |
处理脚本(用awk实现)
可以直接在终端用awk命令处理输出,或者把脚本保存成convert.awk文件运行:
BEGIN { # 初始化固定表头变量 filename = "" linenum = "" # 先打印固定表头部分 printf "| File name | Line number |" } # 匹配文件名行 /File searched is/ { filename = $NF } # 匹配行号行,兼容输入里的笔误"fie"和正确拼写"file" /[Ff]ile found at line number/ { linenum = $NF } # 匹配key-value格式的行 /"key":/ || /"Key":/ { # 去除引号,分割提取key和value gsub(/"/, "", $0) split($0, parts, /[:, ]+/) key = parts[2] value = parts[4] # 记录key和对应值,首次遇到时追加表头 if (!key_exists[key]) { keys[++key_count] = key key_exists[key] = 1 printf " %s |", key } values[key] = value } END { # 打印表头分隔线 printf "\n|-----------|-------------|" for (i=1; i<=key_count; i++) { printf "%" length(keys[i]) "s|", "--------" } # 打印值行 printf "\n| %s | %s |", filename, linenum for (i=1; i<=key_count; i++) { printf " %s |", values[keys[i]] } printf "\n" }
使用方法
如果你的脚本输出已经存到output.txt文件,运行:
awk -f convert.awk output.txt
如果要实时处理脚本的输出,直接通过管道传递:
your_script.sh | awk -f convert.awk
脚本说明
- 兼容输入文本里的拼写错误(比如
fie和file) - 自动识别动态的key字段,将其追加为表头并对应填充值
- 最终输出标准的Markdown表格格式,也可以根据需求调整为纯CSV格式(去掉分隔线和竖线即可)
内容的提问来源于stack exchange,提问作者apratim
相关产品推荐
相关产品推荐

