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

如何用Bash脚本展示员工CSV文件的层级树形结构?

用Bash脚本实现员工层级树形结构展示

可以用awk编写脚本处理CSV文件,完成树形层级生成和根节点标注,以下是完整脚本:

#!/usr/bin/env awk -f

BEGIN {
    FS = ","
    # 跳过表头行
    getline
}

# 存储员工信息,构建ID与姓名、经理ID的映射,同时记录每个经理的下属列表
{
    id = $1
    manager_id = $2
    fullname = $3 " " $4
    emp_info[id]["name"] = fullname
    emp_info[id]["manager"] = manager_id
    subordinates[manager_id] = subordinates[manager_id] " " id
}

END {
    # 处理所有顶层管理者(managerid为0的员工)
    split(subordinates[0], top_managers)
    for (i in top_managers) {
        top_id = top_managers[i]
        if (top_id == "") continue
        top_name = emp_info[top_id]["name"]
        # 打印顶层节点
        printf "%s:%s(%s:%s)\n", top_id, top_name, top_id, top_name
        # 递归处理下属,初始前缀为空,层级从1开始
        print_subordinates(top_id, "", 1, top_id, top_name)
    }
}

# 递归打印下属节点的函数
function print_subordinates(parent_id, prefix, level, root_id, root_name,    subs, i, sub_id, new_prefix) {
    split(subordinates[parent_id], subs)
    for (i in subs) {
        sub_id = subs[i]
        if (sub_id == "") continue
        # 根据层级生成对应前缀
        new_prefix = (level == 1) ? "+" : prefix "-"
        # 打印当前节点,附带根管理者信息
        printf "%s%s:%s(%s:%s)\n", new_prefix, sub_id, emp_info[sub_id]["name"], root_id, root_name
        # 递归处理当前节点的下属
        print_subordinates(sub_id, new_prefix, level + 1, root_id, root_name)
    }
}

使用步骤

  1. 将代码保存为文件emp_tree.awk
  2. 赋予脚本执行权限:chmod +x emp_tree.awk
  3. 执行脚本处理你的CSV文件:./emp_tree.awk 你的文件名.csv

脚本说明

  • BEGIN块:设置CSV分隔符为逗号,跳过表头行避免处理无效数据。
  • 主处理块:遍历每一行员工数据,存储员工的姓名、直属经理ID,同时维护每个经理对应的下属ID列表。
  • END块:筛选出所有顶层管理者(直属经理ID为0的员工),逐个打印顶层节点后,调用递归函数处理其下属层级。
  • 递归函数:根据当前层级生成树形前缀(+、+-、+--等),打印员工信息并标注其所属的顶层管理者,再递归处理该员工的下属。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:25:19