You need to enable JavaScript to run this app. 基于data.txt学生成绩表编写多分支Shell脚本info.sh的实现求助
优惠活动
大模型
产品
解决方案
定价
更多

基于data.txt学生成绩表编写多分支Shell脚本info.sh的实现求助

info.sh 脚本完整实现方案

原参考代码存在逻辑疏漏:错误将数据文件首行判定为表头并跳过,会丢失第一条学生记录的统计,实际实现时需替换为自定义固定表头,不依赖数据文件的表头结构。

核心分流逻辑

在shell层先对传入参数做前置判断,不同分支对应不同的awk处理规则,避免全量循环带来的性能损耗:

  • 若参数个数大于1:直接输出错误提示,终止脚本运行
  • 若参数个数为0:进入全量成绩统计分支
  • 若参数个数为1:先判断参数是否为纯数字,是则按学生ID匹配,否则按学生名/姓匹配

完整脚本代码

将以下内容保存为info.sh:

#!/bin/bash

# 配置数据文件路径
DATA_FILE="data.txt"

# 分支1:参数数量超过1,输出错误
if [ $# -gt 1 ]; then
    echo "错误:仅支持最多传入1个参数"
    exit 1
fi

# 分支2:无参数运行,输出所有学生的名、姓、三门课平均分
if [ $# -eq 0 ]; then
    awk '
    # 打印固定表头
    BEGIN { print "First Name Last Name Average" }
    {
        sum = 0
        # 从第4列开始累加3门科目成绩
        for(i=4; i<=NF; i++) {
            sum += $i
        }
        print $2, $3, (sum/3)
    }' "$DATA_FILE"
    exit 0
fi

# 分支3:处理单参数场景
INPUT=$1
# 判断参数是否为纯数字
if [[ $INPUT =~ ^[0-9]+$ ]]; then
    # 数字参数:匹配学生ID
    awk -v target_id="$INPUT" '
    BEGIN { is_match = 0 }
    {
        if ($1 == target_id) {
            sum = 0
            for(i=4; i<=NF; i++) {
                sum += $i
            }
            # 输出匹配学生的ID、名、姓、平均分
            print $1, $2, $3, (sum/3)
            is_match = 1
        }
    }
    END {
        if (is_match == 0) {
            print "未找到ID为 " target_id " 的学生记录"
        }
    }' "$DATA_FILE"
else
    # 非数字参数:匹配名或姓,输出对应学生ID
    awk -v target_name="$INPUT" '
    BEGIN { is_match = 0 }
    {
        if ($2 == target_name || $3 == target_name) {
            print $1
            is_match = 1
        }
    }
    END {
        if (is_match == 0) {
            print "未找到姓名匹配 " target_name " 的学生记录"
        }
    }' "$DATA_FILE"
fi

场景测试示例

  • 无参数运行:执行 ./info.sh
    输出参考:
    First Name Last Name Average
    ram sen 13
    sam gupta 23
    jamie any 13
    nancy rohila 15.3333
    
  • 传入数字ID参数:执行 ./info.sh 121
    输出参考:
    121 jamie any 13
    
  • 传入姓名参数:执行 ./info.sh sen
    输出参考:
    101
    
  • 传入多参数:执行 ./info.sh 121 sen
    输出参考:
    错误:仅支持最多传入1个参数
    

注意事项

  • 脚本运行前需添加执行权限:chmod +x info.sh
  • 需将data.txt文件放在与脚本相同的工作目录下,若路径不同可修改脚本中DATA_FILE变量为实际文件的绝对路径
  • 当前为精确匹配逻辑,如需支持模糊搜索,可将awk中的等值判断替换为正则匹配规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 03:24:08