上一篇
linux如何读取csv文件
- Linux
- 2025-08-11
- 4
在 Linux 中,可用
cat
快速预览 CSV;
awk -F',' '{print $1}' file.csv
按逗号分隔提取列;或用
csvtool
等工具解析,实现灵活高效的 CSV
在Linux系统中读取CSV文件有多种方式可供选择,具体取决于您的使用场景(快速查看/简单处理/复杂分析)、数据规模以及是否需要后续编程操作,以下是完整的解决方案及技术要点解析:
基础查看类命令
cat
+ 管道过滤
# 基础查看(适合小文件) cat data.csv | head -n 5 # 显示前5行 cat data.csv | tail -n 5 # 显示后5行 cat data.csv | grep "关键词" # 搜索含关键词的行
️ 注意:若文件包含特殊字符(如逗号嵌套),可能导致解析错误。
less
/more
交互式浏览
less data.csv # 支持上下翻页+搜索 fless data.csv # 彩色高亮显示(需安装fop包)
优势:实时滚动查看长文件,按q
退出,进入搜索模式。
column
格式化输出
cat data.csv | column -t -s, # 自动对齐各列(-t:去除制表符,-s,:指定分隔符)
效果:将原始CSV转为整齐的表格形式,适合终端展示。
结构化处理工具
awk
强大的文本处理器
# 示例1:提取第2列的所有值 awk -F, '{print $2}' data.csv > column2.txt # 示例2:统计某列数值总和(假设第3列为数字) awk -F, '{sum += $3} END {print sum}' data.csv # 示例3:筛选满足条件的行(如年龄>30) awk -F, '$4 > 30 {print $0}' data.csv > filtered.csv
技巧:-F,
显式指定逗号为分隔符,避免自动分割带来的歧义。
csvtool
专业CSV处理套件
功能 | 命令示例 | 说明 |
---|---|---|
查看头部 | csvcut -n data.csv |
显示列名及前几行数据 |
转换格式 | csvformat -T data.csv |
转置行列 |
排序 | csvsort -c 2 -r data.csv |
按第2列降序排列 |
合并多文件 | csvjoin -c 1,2 file1.csv file2.csv |
按第1/2列关联两个文件 |
️ 依赖安装:需先通过包管理器安装(Debian/Ubuntu: sudo apt install csvtool
)。
miller
(mlr) 高性能CSV处理器
# 统计每列的唯一值数量 mlr --csv stats1 -g data.csv # 按某列分组求平均值(假设第5列为数值) mlr --csv put '$avg_val=$5/NR' then ungroup data.csv
特点:内存占用低,适合GB级大文件处理。
编程接口方案
Python + pandas(推荐用于数据分析)
import pandas as pd # 基本读取 df = pd.read_csv("data.csv") print(df.head()) # 处理特殊字符(如换行符在单元格内) df = pd.read_csv("data.csv", quotechar='"', escapechar='\') # 指定列名跳过首行 df = pd.read_csv("data.csv", header=None, names=["col1", "col2"])
扩展能力:可直接进行数据清洗、可视化或导出为其他格式。
R语言(统计分析场景)
# 读取并查看摘要 data <read.csv("data.csv", stringsAsFactors=FALSE) summary(data) # 处理缺失值 data[is.na(data)] <0 # 将NA替换为0
适用场景:统计学建模前的预处理。
SQL数据库导入
# MySQL导入(需提前创建数据库) mysqlimport --local -u root -p mydatabase data.csv # PostgreSQL导入(使用COPY命令) psql -U postgres -d mydb -c "copy table_name FROM 'data.csv' DELIMITER ',' CSV HEADER"
️ 优势:利用数据库索引加速查询,支持事务回滚。
关键注意事项
问题类型 | 解决方案 |
---|---|
编码问题 | 添加-k iconv 参数或使用iconv 工具转换编码:iconv -f GBK -t UTF-8 data.csv > new.csv |
awk 中使用NR>1 跳过首行;pandas 设置header=None |
|
超大文件卡顿 | 使用split 分割文件:split -l 100000 data.csv small_part_ |
特殊分隔符 | awk -F';' 处理分号分隔的文件;pd.read_csv(sep=';') |
带引号字段 | 确保使用quotechar='"' 参数,避免引号干扰 |
相关问答FAQs
Q1: 为什么用cat
查看CSV会出现错位?
A: 因为默认情况下cat
不会识别CSV的结构,遇到包含逗号的字段(如地址:”北京市,朝阳区”)会错误分割,建议改用column -t -s,
或专业工具如csvlook
(来自csvkit包)。
Q2: 如何处理带有BOM头的文件?(常见于Excel导出的UTF-8文件)
A: 使用iconv
去除BOM头:iconv -f utf-8 -t utf-8//IGNOREBOM data.csv > cleaned.csv
,在Python中可添加参数encoding='utf-8-sig'
。
通过上述方法组合,您可以灵活应对从简单查看到复杂分析的各种需求,对于日常使用,推荐掌握awk
基础操作和csvtool
工具集;涉及数据分析时,优先选择