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

如何用Awk脚本基于指定ICD编码判定患者疾病诊断标签

解决ICD编码矩阵的诊断标签生成问题

需求说明

  • 两个输入文件:
    1. 制表符分隔的A.tsv:ICD编码矩阵,首列是患者IDstudy_id,其余列名是ICD编码;每行对应一位患者,单元格值为NA代表未诊断该编码,非NA代表有诊断
    2. 关注ICD编码文件:每行第一列是需要重点关注的ICD编码,第二列是编码类型(可忽略)
  • 生成规则:只要患者在任意一个关注ICD编码对应的列中值不是NA,诊断标签设为1;否则设为0

文件示例

A.tsv内容

study_id 691.8 692.9 701.2 706.1
a1       1     NA    NA    2
a2       NA    NA    NA    NA
a3       NA    NA    1    NA

关注ICD编码文件内容

691.8 ICD_9
706.1 ICD_10

预期输出

study_id diagnosis
a1       1
a2       0
a3       0

现有脚本的问题

原脚本错误地把单元格里的数值当成ICD编码去匹配关注列表,但实际矩阵的列名才是ICD编码,单元格值是诊断状态。这导致脚本逻辑完全偏离需求,无法正确筛选关注的编码列。

修正后的Awk脚本

awk -F"\t" 'BEGIN { OFS="\t"; }
# 读取关注ICD文件,将目标编码存入数组
NR==FNR { icd_target[$1] = 1; next; }
# 处理A.tsv表头,记录目标ICD对应的列位置
FNR==1 {
    print "study_id", "diagnosis"
    for (i=2; i<=NF; i++) {
        if ($i in icd_target) {
            target_cols[i] = 1  # 标记需要检查的列索引
        }
    }
    next;
}
# 处理患者数据行,判断诊断标签
{
    diagnosis = 0
    # 只遍历标记过的目标列
    for (i in target_cols) {
        if ($i != "NA") {
            diagnosis = 1
            break
        }
    }
    print $1, diagnosis
}' 关注ICD编码文件路径 A.tsv > 输出文件路径

修正逻辑说明

  1. 先读关注ICD文件,把需要关注的编码存入icd_target数组,用1标记存在
  2. 处理A.tsv的表头时,遍历所有列名,把属于关注ICD的列位置记录到target_cols数组
  3. 处理患者数据行时,只检查target_cols里的列:只要有一个列的值不是NA,就把诊断标签设为1
  4. 全程保持制表符分隔的输入输出格式,和原文件格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:23