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

如何用bash/awk检测CSV行变化 移动日期异常CSV到指定目录

解决方案

直接用单条awk检测加状态码判断就可以实现需求,无需多管道拼接,大文件场景下也能做到高效检测,完整可运行脚本如下:

#!/bin/bash
# 创建目标目录,重复运行也不会报目录已存在错误
mkdir -p dir_different

# 遍历当前目录下所有csv文件
for csv_file in *.csv; do
  # 跳过非文件项,避免无csv文件时通配符直接作为文件名的异常
  [ -f "$csv_file" ] || continue

  # awk检测逻辑:只要发现第一列(timestamp列)有不同值就返回异常状态码
  awk -F ',' '
    # 跳过表头行,取第一个数据行的日期作为基准
    NR == 2 { base_ts = $1 }
    # 后续行只要和基准日期不一样,直接退出并返回1(异常标识)
    NR > 2 && $1 != base_ts { exit 1 }
  ' "$csv_file"

  # 状态码非0即为异常文件,移动到目标目录
  if [ $? -ne 0 ]; then
    mv -f "$csv_file" dir_different/
    echo "已移动异常文件:$csv_file"
  fi
done
说明
  • 效率优势:不需要读完整个文件,只要发现一个不符合的日期就立刻终止检测,百兆级大文件也能毫秒级出结果
  • 兼容处理:所有变量加双引号,适配文件名带空格的场景
  • 可调整性:如果你的timestamp不是第一列,把代码里的$1改成对应列号即可;如果CSV分隔符不是逗号,修改-F ','里的分隔符即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:36:04