请求编写Shell脚本(可使用grep/awk/sed等工具)将API请求记录文本转换为指定格式CSV文件
请求编写Shell脚本(可使用grep/awk/sed等工具)将API请求记录文本转换为指定格式CSV文件
嗨,我来帮你搞定这个CSV转换需求!用awk工具就能完美解决,它处理这种有固定规律的日志文本特别顺手,下面直接给你方案:
单行命令版
如果你不想写单独的脚本文件,直接用这条命令就行,假设你的原始日志文件叫api_records.txt:
awk '/^\+/ { desc = substr($0, 3); next } /^(POST|GET|PATCH|DELETE)/ { method = $1; split($NF, arr, /\[|,|ms\]/); status = arr[2]; gsub(/ OK| No Content/, "", status); time = arr[4]; printf "%s,%s,%s,%s\n", method, desc, status, time }' api_records.txt > output.csv
拆分解释版(方便理解)
如果想更清晰,可以把逻辑写成单独的convert.awk脚本文件:
# 处理描述行(以+开头的行) /^\+/ { # 去掉开头的"+ ",提取完整描述 desc = substr($0, 3) # 跳过当前行,处理下一行 next } # 处理API请求行(以HTTP方法开头的行) /^(POST|GET|PATCH|DELETE)/ { # 提取HTTP方法(POST/GET等) method = $1 # 分割最后一个字段(比如[200 OK, 482B, 35ms]),拿到状态和耗时 split($NF, arr, /\[|,|ms\]/) # 提取状态码,去掉后面的文本(比如"200 OK"变成"200") status = arr[2] gsub(/ OK| No Content/, "", status) # 提取耗时数字(比如"35ms"变成"35") time = arr[4] # 按CSV格式输出 printf "%s,%s,%s,%s\n", method, desc, status, time }
使用方法:
awk -f convert.awk api_records.txt > output.csv
额外优化(处理含逗号的描述)
如果你的API描述里可能包含逗号,为了符合CSV规范,可以把输出的字段用双引号包裹,修改printf行即可:
printf "\"%s\",\"%s\",\"%s\",\"%s\"\n", method, desc, status, time
执行完命令后,output.csv里就是你想要的格式啦!
备注:内容来源于stack exchange,提问作者guptpallav
相关产品推荐
相关产品推荐

