基础文本操作法
手动创建/重定向
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