You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Shell脚本清理CSV:移除冗余字符并修复损坏行

Shell脚本处理损坏CSV并清理内容的方案

作为Shell新手,处理这种乱掉的CSV确实挺闹心的——既要清理特殊字符、空行,还要把连在一起的记录拆分开,还要保证后续Scala能正常处理。我给你整了一套用系统自带工具实现的方案,简单好懂,直接就能用:

先明确要搞定的事儿

  • 删掉所有*号和那些\xC2\xA0格式的非换行空格
  • 把空行全部移除,避免Scala报错
  • 修复那些连在一起的损坏行,恢复每行ID, 内容的CSV结构

完整脚本代码

把下面的代码存成clean_csv.sh文件就行:

#!/bin/bash

# 替换成你的输入CSV路径
INPUT_FILE="your_input.csv"
# 处理后的输出文件
OUTPUT_FILE="cleaned_csv.csv"

# 核心处理流程:先拆损坏行 → 再清特殊字符 → 最后删空行
awk '{
    # 匹配18位数字ID+逗号,在前面加换行拆分记录
    gsub(/([0-9]{18}),/, "\n&")
    print $0
}' "$INPUT_FILE" | \
sed -e 's/\xC2\xA0//g' \
    -e 's/\*//g' | \
sed '/^[[:space:]]*$/d' > "$OUTPUT_FILE"

echo "搞定!处理好的文件在 $OUTPUT_FILE 里"

每一步都给你讲明白

  1. awk拆分损坏行:观察你的CSV,所有合法的ID都是18位数字,所以用gsub把所有18位数字+逗号的组合前面加个换行,这样连在一起的记录就自动拆成单独的行了。&代表匹配到的内容,所以\n&就是在ID前插换行。
  2. sed清理特殊字符:第一个sed命令把所有\xC2\xA0(UTF-8的非换行空格)删掉,同时把所有*号也清掉;
  3. sed删除空行:第二个sed命令把所有空行(包括只有空格的行)都删掉;
  4. 最后把结果存到输出文件里。

怎么用?超简单

  1. 把你的CSV文件路径替换到脚本里的INPUT_FILE;
  2. 给脚本加执行权限:chmod +x clean_csv.sh;
  3. 运行脚本:./clean_csv.sh;
  4. 处理好的文件就会出现在OUTPUT_FILE指定的路径里。

测试下损坏行的效果

拿你给的那条损坏行:

902755305158782976, 12z ecmwf setup support major strike east coast high east deep uul west hurricaneirma 902777486186086400, future hurricaneirma satellite look impressive tropicaldepression10 24 hour 903355611810852867 hurricaneirma think 903355611810852868 hurricagggneirma think

经过脚本处理后会变成:

902755305158782976, 12z ecmwf setup support major strike east coast high east deep uul west hurricaneirma 
902777486186086400, future hurricaneirma satellite look impressive tropicaldepression10 24 hour 
903355611810852867 hurricaneirma think 
903355611810852868 hurricagggneirma think

注意:最后两行原来就没有逗号,脚本没法自动补(毕竟没法判断内容和ID的分界),这类行你可能需要手动检查下,但大部分正常的损坏行都能自动修复。

内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:37:42