如何用awk转置表格格式?将cURL获取的REST API输出转为指定表格
解决思路与实现方法
以下是几种在终端环境下将API返回的键值对格式转换为对齐表格的实用方法:
方法1:使用awk(推荐,轻量高效)
awk是处理结构化文本的利器,可直接提取所需字段并格式化输出:
curl "你的API地址" | awk ' BEGIN { print "groupId groupPath" } /^OK:/ { next } # 跳过开头的OK行 /^groupId:/ { id = substr($0, 10) } # 提取groupId值 /^groupPath:/ { path = substr($0, 12) printf "%-8s %s\n", id, path # 左对齐id列,宽度8 id = "" # 重置变量,准备下一组数据 } '
说明:
BEGIN块在处理文本前先打印表头substr($0, 10)从第10个字符开始截取(跳过"groupId: ")%-8s确保groupId列占8个字符宽度,左对齐,和表头的"groupId "(8个字符)匹配
方法2:sed + paste + column 组合
利用文本替换和列对齐工具快速处理:
curl "你的API地址" | sed '/^OK:/d' | # 删除开头的OK行 paste - - | # 将每两行合并为一行(用制表符分隔) sed 's/groupId: //; s/\tgroupPath: /\t/' | # 移除键名,保留值 column -t -s $'\t' # 按制表符分隔对齐列
说明:
paste - -把相邻两行合并,适合这种成对出现的键值对column -t自动根据内容宽度对齐所有列
方法3:Python脚本(适合复杂场景扩展)
如果需要更灵活的处理逻辑,用Python脚本实现:
curl "你的API地址" | python3 -c " import sys # 过滤空行和OK行,提取有效内容 lines = [line.strip() for line in sys.stdin if line.strip() and not line.startswith('OK:')] # 按每两行一组提取数据 group_data = [(lines[i].split(': ')[1], lines[i+1].split(': ')[1]) for i in range(0, len(lines), 2)] # 输出表头和格式化内容 print('groupId groupPath') for gid, gpath in group_data: print(f'{gid:<8} {gpath}') "
说明:
split(': ')[1]直接分割键值对,提取对应的值f'{gid:<8}'用f-string实现左对齐,确保列宽一致
内容的提问来源于stack exchange,提问作者Nagu
相关产品推荐
相关产品推荐

