基础文本操作法
手动创建/重定向
echo "张三,25,北京" >> data.csv echo "李四,30,上海" >> data.csv
- 说明:
>
创建新文件,>>
追加内容。
结合变量生成
name="王五" age=28 city="广州" echo "$name,$age,$city" >> data.csv
命令行工具处理
用 awk
格式化输出
# 将空格分隔的文本转为CSV ls -l | awk 'NR>1 {print $9 "," $5}' > files.csv
- 参数解析:
NR>1
:跳过表头行$9
和$5
:文件名和文件大小
用 sed
替换分隔符
# 将冒号分隔的 /etc/passwd 转为CSV sed 's/:/,/g' /etc/passwd > users.csv
编程语言生成
Python脚本(推荐)
import csv data = [ ["姓名", "年龄", "城市"], ["张三", 25, "北京"], ["李四", 30, "上海"] ] with open("data.csv", "w", newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(data)
- 优势:自动处理逗号/换行符转义(如字段含逗号会添加引号)。
Bash循环生成
#!/bin/bash headers=("产品" "价格" "库存") items=("手机" "5000" "100" "笔记本" "8000" "50") { echo ${headers[@]} | tr ' ' ',' for ((i=0; i<${#items[@]}; i+=3)); do echo "${items[i]},${items[i+1]},${items[i+2]}" done } > products.csv
数据库导出CSV
SQLite 导出
sqlite3 mydb.db -csv "SELECT * FROM users;" > users.csv
MySQL 导出
SELECT * FROM sales INTO OUTFILE '/var/lib/mysql/sales.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
- 权限要求:MySQL用户需有
FILE
权限。
特殊字符处理技巧
当数据包含逗号或换行符时:
- 用双引号包裹字段:
echo '"带逗号,的文本",100' >> data.csv
- Python的
csv
模块:自动处理特殊字符 - 避免编码问题:统一使用
UTF-8
编码
验证与查看CSV
# 查看前5行 head -n 5 data.csv # 检查文件格式 file -i data.csv # 输出应为:data.csv: text/plain; charset=utf-8
应用场景建议
方法 | 适用场景 |
---|---|
手动重定向 | 快速生成简单数据 |
awk/sed | 处理现有文本的格式转换 |
Python脚本 | 复杂数据或需要自动转义的情况 |
数据库导出 | 直接从数据库提取数据 |
注意事项
- 权限问题:确保对目标目录有写入权限(使用
chmod
或sudo
)。 - Windows兼容性:在Linux生成CSV时,换行符为
\n
(Windows默认\r\n
),可用unix2dos
转换。 - 大文件处理:超大数据集建议用
awk
或编程语言,避免内存溢出。
引用说明基于Linux核心工具(GNU Bash, awk, sed)、Python官方文档及数据库管理最佳实践整理,具体命令参数可通过
man [命令]
(如man awk
)或查阅 Python CSV模块文档 进一步验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4528.html