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

Awk脚本无输出排查:检测表格1-4列匹配时第6列一致性

问题:定位表格中不符合规则的行

原始数据

1,879468,944088,A,C,K,Q,0.159,ENST00000342066
1,879468,944088,A,G,K,E,0.160,ENST00000342066
1,879469,944089,A,C,K,T,0.185,ENST00000342066
1,879469,944089,A,C,Q,T,0.185,ENST00000342066

需求说明

当任意两行的第1、2、3、4列数值完全相同时,第6列的数值必须保持一致。例如上述数据中,最后两行的第1-4列均为1,879469,944089,A,但第6列分别是K和Q,属于不符合规则的情况。

原脚本无输出的可能原因

  • 数据文件使用Windows换行符(\r\n),导致生成的key包含隐藏的\r字符,视觉上相同的key实际不匹配
  • 脚本的流式处理逻辑仅能检测后续行与第一个匹配行的冲突,若存在更早的冲突行无法被识别
  • 脚本执行时指定的文件路径或名称错误(比如my_table.txt不存在或路径有误)

修正后的脚本

以下脚本先收集所有相同key对应的第6列值和行号,再统一检查所有冲突,同时避免了换行符干扰:

awk -F ',' '{
    # 用竖线分隔生成唯一key,规避逗号带来的匹配问题
    key = $1 "|" $2 "|" $3 "|" $4;
    # 记录每个key对应的所有第6列值和行号
    val_list[key] = val_list[key] " " $6;
    line_list[key] = line_list[key] " " NR;
}
END {
    # 遍历所有已记录的key
    for (key in val_list) {
        split(val_list[key], vals);
        split(line_list[key], lines);
        # 以第一个值作为基准值
        base_val = vals[1];
        base_line = lines[1];
        # 检查后续所有值是否与基准一致
        for (i=2; i<=length(vals); i++) {
            if (vals[i] != base_val) {
                print "发现不匹配:";
                print "  Key: " key;
                print "  行" base_line "的值:" base_val;
                print "  行" lines[i] "的值:" vals[i];
                print "------------------------";
            }
        }
    }
}' my_table.txt

额外排查步骤

  1. 确认文件存在:运行ls my_table.txt检查文件路径是否正确
  2. 转换文件换行符为Unix格式:
    dos2unix my_table.txt
    
  3. 验证列数正确性:运行awk -F ',' '{print NF}' my_table.txt确保每行都是9列

内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:00:36