在电脑学堂做表格处理,很多人以为Excel点点拖拖就完事了,其实真遇到大批量数据清洗、跨文件合并、定时导出这些活儿,命令行工具反而更利索——比如用 csvkit 处理CSV,用 awk 提取指定列,或者用 sort 和 uniq 去重统计。但一上手就报错?别急,这些坑我全踩过。
路径写错,文件根本找不到
最常发生的错误是:明明文件就在桌面上,输入 csvcut -c 1 Desktop/data.csv 却提示 No such file or directory。问题不在工具,而在当前工作目录不对。命令行不认“桌面”这种中文路径别名,也不自动切换到你双击打开的那个文件夹。得先 cd ~/Desktop,再运行命令;或者直接写绝对路径:csvcut -c 1 /Users/yourname/Desktop/data.csv(macOS)或 csvcut -c 1 C:\Users\yourname\Desktop\data.csv(Windows PowerShell里注意双反斜杠)。
编码乱码,中文列名变问号
从Excel另存为CSV后,用 in2csv 转成标准格式,结果表头一堆 字。这是Windows默认用GBK编码,而大多数命令行工具(包括csvkit)默认按UTF-8读。解决方法很简单:
in2csv --encoding gbk data.csv > data_utf8.csv下次再处理,就清清爽爽了。列号数错,结果全跑偏
想用 csvcut -c 3,5,7 提取第3、5、7列,结果导出的却是空或错位数据——因为CSV里有带逗号的字段(比如“张三,北京”),没加引号的话,csvcut 就会把这一个字段当成两列算。正确做法是确保原始CSV已用双引号包裹文本字段,或者用 --no-inference 强制按真实分隔解析:
csvcut --no-inference -c 3,5,7 data.csv管道连错顺序,中间结果直接丢
想把表格去重后取前10行,写了 csvsort data.csv | head -10 | csvlook,结果发现不是按某列排序后的前10条,而是原始顺序的前10条。原因:head -10 在 csvsort 输出完成前就截断了流。得加上 -r(reverse)或明确指定排序列:
csvsort -c "销售额" data.csv | head -10 | csvlook注意列名带空格或中文时,要用英文引号包住。权限不够,写入被拒
用 csvformat -D "\t" data.csv > data.tsv 想转成制表符分隔,却提示 Permission denied。不是磁盘满了,而是当前目录你没写入权限(比如在系统目录或他人文件夹下)。换个地方,比如直接输出到自己桌面上:
csvformat -D "\t" data.csv > ~/Desktop/data.tsv或者先 ls -l 看一眼当前目录权限,心里有底。命令行不是玄学,每个报错都在告诉你哪一步没对上。多看一眼报错信息里的文件名、行号、关键词(比如 encoding、permission、not found),比硬背命令管用得多。