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

如何对CSV文件中Department列值去重后拼接为单个字段?

解决方案

以下几种方法可以实现CSV中Department列的去重并拼接为Fin Tech/HR格式:

方法1:使用Shell工具链(简洁高效)

awk -F ',' 'NR>1 {gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print $2}' your_file.csv | sort -u | paste -sd '/' -

步骤解析:

  • awk -F ',' 'NR>1 {gsub(...); print $2}':跳过表头,提取第二列并去除首尾空格
  • sort -u:对提取的部门值排序并去重
  • paste -sd '/' -:将所有去重后的行用/连接成单行

方法2:纯Awk实现(保持首次出现顺序)

如果需要保留部门首次出现的顺序而非按字母排序,可使用:

awk -F ',' 'NR>1 {
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
    if (!seen[$2]++) arr[++n] = $2
} END {
    for (i=1; i<=n; i++) printf "%s%s", arr[i], (i<n ? "/" : "\n")
}' your_file.csv

步骤解析:

  • 用关联数组seen记录已出现的部门
  • 数组arr保存首次出现的部门值
  • END块遍历数组并拼接输出

方法3:修改原有循环脚本

如果需要保留逐行处理的逻辑,可使用关联数组追踪已存在的部门:

declare -A seen_departments
current_Department=""

while IFS=, read -r Server Department; do
    # 跳过表头行
    [[ "$Server" == "Server" ]] && continue
    
    # 去除部门值首尾空格
    trimmed_dept=$(echo "$Department" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
    
    # 仅添加未出现过的部门
    if [[ -z "${seen_departments[$trimmed_dept]}" ]]; then
        seen_departments[$trimmed_dept]=1
        current_Department=${current_Department:+$current_Department/}$trimmed_dept
    fi
done < your_file.csv

echo "$current_Department"

原脚本问题说明

你当前的脚本没有对已添加的部门做去重判断,只是简单将每个新读取的$Department拼接到$current_Department后,导致重复值被多次添加。核心缺失的是追踪已存在值的逻辑,上述方案均通过关联数组或排序去重解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:32:45