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

编写Bash脚本提取数组中CSV条目首次唯一出现及重复项

Bash脚本实现CSV路径去重与重复收集

给定按日期从新到旧排序的数组array1:

array1=(url://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ url://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ url://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ c.csv/ d.csv/ url://root/sub1/sub2/2022-07-22/ a.csv/)

需要编写Bash脚本完成两个任务:

  1. 生成数组array2,包含每个CSV文件首次(最新)出现的完整路径,结果如下:
array2=(url://root/sub1/sub2/2022-10-22/a.csv/ url://root/sub1/sub2/2022-10-22/b.csv/ url://root/sub1/sub2/2022-08-22/c.csv/ url://root/sub1/sub2/2022-08-22/d.csv/)
  1. 生成数组array3,包含所有重复出现的CSV文件完整路径,结果如下:
array3=(url://root/sub1/sub2/2022-09-22/a.csv/ url://root/sub1/sub2/2022-09-22/b.csv/ url://root/sub1/sub2/2022-08-22/a.csv/ url://root/sub1/sub2/2022-08-22/b.csv/ url://root/sub1/sub2/2022-07-22/a.csv/)

实现思路

遍历数组时,先识别日期路径前缀(包含YYYY-MM-DD格式且以/结尾的项),后续的CSV文件名与当前前缀拼接成完整路径。用关联数组记录已出现的CSV文件名:遇到新CSV就加入array2并标记已存在;遇到已存在的CSV则加入array3。

完整脚本

#!/bin/bash

# 原始数组
array1=(url://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ url://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ url://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ c.csv/ d.csv/ url://root/sub1/sub2/2022-07-22/ a.csv/)

# 初始化变量
declare -A seen_csv  # 记录已出现的CSV文件名
current_prefix=""    # 当前日期路径前缀
array2=()            # 存储首次出现的完整路径
array3=()            # 存储重复的完整路径

# 遍历数组元素
for item in "${array1[@]}"; do
    # 判断当前项是否是日期路径前缀
    if [[ "$item" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}/$ ]]; then
        current_prefix="$item"
        continue
    fi

    # 拼接完整路径
    full_path="${current_prefix}${item}"
    # 提取纯CSV文件名(去除前后的/)
    csv_name=$(echo "$item" | sed 's/^\/\|\/$//g')

    # 判断是否已见过该CSV
    if [[ -z "${seen_csv[$csv_name]}" ]]; then
        array2+=("$full_path")
        seen_csv[$csv_name]=1
    else
        array3+=("$full_path")
    fi
done

# 输出结果验证
echo "array2内容:"
printf "%s\n" "${array2[@]}"
echo -e "\narray3内容:"
printf "%s\n" "${array3[@]}"

运行结果

执行脚本后,输出的array2和array3将与需求示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:05:25