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

如何使用AWK提取每位学生的第一条唯一反馈记录?

提取每位学生第一条反馈的解决方案

嘿,你的思路方向完全没问题,用标记学生ID的方式来筛选第一条反馈是很靠谱的!不过换成**字典(哈希表)**会更高效——它能快速判断学生ID是否已经出现过,避免重复遍历,下面是具体的实现步骤和代码:

核心逻辑

我们需要完成两个核心动作:

  • 从每条记录里提取第5、6位的学生ID(注意字符串索引从0开始,对应索引4和5的位置)
  • 用字典记录已经处理过的学生ID,只保留每个ID对应的第一条反馈

具体实现(以Python为例)

1. 读取并拆分记录

首先要把文件内容拆分成单独的反馈记录,根据文件格式不同有两种方式:

  • 如果文件是换行分隔每条记录:
# 读取文件并按行拆分,自动过滤空行
with open('students_feedback.txt', 'r', encoding='utf-8') as f:
    records = [line.strip() for line in f if line.strip()]
  • 如果文件内容是连在一起的(像你给出的示例那样),可按记录特征拆分(比如每条以100000000开头):
with open('students_feedback.txt', 'r', encoding='utf-8') as f:
    content = f.read()
# 按特征字符串拆分后补回开头的特征符,确保记录完整
records = ['100000000' + part for part in content.split('100000000')[1:]]

2. 筛选并保存第一条反馈

用字典跟踪已出现的学生ID,遍历记录时只保留首次出现的反馈内容:

# 存储结果:键为学生ID,值为对应第一条反馈
first_feedbacks = {}

for record in records:
    # 提取第5、6位字符作为学生ID(切片[4:6]对应第5、6位)
    student_id = record[4:6]
    # 仅当ID未被记录时保存反馈
    if student_id not in first_feedbacks:
        first_feedbacks[student_id] = record

# 打印查看结果
for sid, feedback in first_feedbacks.items():
    print(f"学生ID {sid} 的第一条反馈:{feedback}")

# 将结果保存到新文件
with open('first_feedbacks_result.txt', 'w', encoding='utf-8') as f:
    for sid, feedback in first_feedbacks.items():
        f.write(f"{sid}: {feedback}\n")

关键细节提醒

  • 索引对应:字符串索引从0开始,所以“第5、6位”对应切片[4:6],别搞错位置哦
  • 效率优势:字典的查找操作是O(1)时间复杂度,比数组遍历判断存在性高效得多,适合处理大量记录
  • 灵活调整拆分规则:如果你的记录有其他分隔特征(比如特定符号),可以修改拆分逻辑,确保能正确拆分出每条独立反馈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:45