- 首页 >
- 问答 >
-
智能运维 >
- 如何通过Linux extract进行数据清洗
如何通过Linux extract进行数据清洗
小樊
44
2026-01-03 16:08:01
澄清 extract 的含义与总体思路
- 在 Linux 语境里,extract 通常指从压缩包中解压文件(如 tar/gzip/bzip2),它并不是数据清洗工具。数据清洗应依赖文本处理命令(如 grep、awk、sed、cut、sort、uniq)或专业工具(如 csvkit)。如果你的场景是“先解压再清洗”,思路是:先用解压命令把数据解到目录,再用文本处理命令完成清洗;若是 Debian 系统,同样不存在名为 extract 的清洗工具,需使用上述命令组合完成清洗任务。
典型清洗流程与命令
- 预览与结构确认
- 查看前几行与列对齐预览:head -n 5 data.csv,column -s’,’ -t data.csv | head。
- 快速查看 CSV 表头与列名:csvcut -n data.csv;更美观的预览:head data.csv | csvlook。
- 列选择与重排
- 保留指定列:cut -d’,’ -f2,5 data.csv > kept_cols.csv。
- 使用 csvkit 更稳健地处理 CSV 列:csvcut -c 2,5 data.csv > kept_cols.csv。
- 行过滤与模式匹配
- 包含关键字:grep -n ‘C’ data.csv > filtered.csv。
- 忽略大小写:grep -i ‘error’ app.log。
- 排除关键字:grep -v ‘DEBUG’ app.log。
- 查找替换与字段规范化
- 批量替换:sed ‘s/old/new/g’ data.csv > cleaned.csv。
- 基于列的处理(如清洗某列并标准化大小写):awk -F’,’ ‘{$2=tolower($2); gsub(/“/,”",$3); print}’ OFS=‘,’ data.csv > norm.csv。
- 排序、去重与抽样
- 去重:sort data.csv | uniq > uniq.csv;仅保留唯一行:sort data.csv | uniq -u > only_unique.csv;查看重复行与计数:sort data.csv | uniq -dc。
- 按多列去重(先按指定列排序,再去重):sort -t’,’ -k1,1 -k2,2 data.csv | uniq > dedup.csv。
- 随机抽样:shuf -n 1000 data.csv > sample.csv;如需排除表头,可先 tail -n +2 再抽样。
CSV 专用增强工具 csvkit
- 列选择与列名查看:csvcut -n data.csv,csvcut -c 1,3-5 data.csv。
- 统计摘要(缺失值、唯一值、最值、均值等):csvcut -c 2 data.csv | csvstat。
- 表格化预览:head data.csv | csvlook。这些命令对带引号的 CSV、复杂分隔与类型推断更稳健,适合作为清洗流程的“增强环节”。
实战示例 从压缩包到清洗结果
- 场景:目录里有一个压缩包 data.tar.gz,内含 data.csv;目标是保留 第2、5列,筛选包含 C 的记录,按 第1列数值升序、 第2列数值降序 排序,去除重复行,并抽取 1000 行 随机样本,最终保存为 clean_sample.csv。
- 命令(可逐行执行或写入脚本):
- 解压:tar xzf data.tar.gz
- 清洗与抽样:
- head -n +2 data/data.csv | grep -E ‘C’
| csvcut -c 2,5
| sort -t’,’ -k1,1g -k2,2gr
| uniq
| shuf -n 1000 \
clean_sample.csv
- 说明:
- head -n +2 跳过表头;grep -E ‘C’ 做包含匹配;csvcut 负责 CSV 列选择;sort -t’,’ -k1,1g -k2,2gr 指定逗号为分隔符并按第1列数值升序、第2列数值降序排序;uniq 去重;shuf -n 1000 抽样。