温馨提示×

如何通过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.csvcolumn -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.csvcsvcut -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 抽样。

0