如何将curl返回的垂直格式输出转换为CSV可用的水平格式
可行性结论
该格式转换需求完全可实现,以下分别提供Shell(Linux/macOS环境)、Windows Batch环境下的落地实现命令,处理结果可直接保存为标准CSV文件使用。
Shell 实现(Linux/macOS 通用)
无需安装额外工具,借助系统自带的awk即可完成处理,执行以下命令即可生成符合要求的CSV文件:
# 写入CSV表头 echo "name, PhoneNumber" > result.csv # 逐行解析原始内容,每两行拼接为一条完整记录 awk -F '"' ' NR%2 == 1 {tmp_name = $4} NR%2 == 0 {print tmp_name", "$4 >> "result.csv"} ' output.txt
命令逻辑说明:
- 以双引号作为分隔符拆分每行内容,目标字段值固定在拆分后的第4个片段
- 奇数行暂存读取到的name值,偶数行读取到电话号码后,和暂存的name拼接为完整的CSV行写入结果
- 最终生成的
result.csv可直接用Excel、Numbers等表格工具打开
如果不需要生成文件,只想在终端直接预览转换结果,可执行单行命令:
awk 'BEGIN{print "name, PhoneNumber"}{gsub(/[",]/,""); if(NR%2==1)n=$3; else print n", "$5}' output.txt
Windows Batch 实现
将以下代码保存为convert.bat,和存好原始内容的output.txt放在同一文件夹,双击运行即可自动生成result.csv:
@echo off chcp 65001 >nul :: 写入CSV表头 echo name, PhoneNumber> result.csv setlocal enabledelayedexpansion set flag=0 for /f "tokens=2 delims=:" %%i in (output.txt) do ( set "v=%%i" :: 清理值里的引号、逗号、多余空格 set "v=!v:"=!" set "v=!v:,=!" set "v=!v: =!" if !flag! equ 0 ( set "curname=!v!" set flag=1 ) else ( echo !curname!, !v!>> result.csv set flag=0 ) ) endlocal
脚本逻辑说明:
- 首先切换控制台编码为UTF-8,避免特殊字符乱码
- 逐行读取原始内容,自动清理无关的格式符号
- 用标记位区分当前读取的是姓名字段还是电话号码字段,两个字段凑齐后拼接为一行写入结果文件
内容的提问来源于stack exchange,提问作者Ener
相关产品推荐
相关产品推荐

