如何使用 AWK 提取每个学生的唯一记录?

How to extract unique records of each student using AWK?

我正在尝试处理学生反馈文件。

场景:

students_feedback.txt:

288Y102RZDBPX1000000001dhana 10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d EU9V103IXI1000000003dfg1000000001dfdfds XATS11SSSFOO4dhanaUXIBB7TF71000000004adf 10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw

我试过的方法:

我想创建一个数组来指定学生 ID(因为我可以给出特定学生的反馈)并通过 awk 读取文件并提取学生 ID。逐行阅读后,我正在根据 stu id 数组检查 stu id 以创建 stu_found 数组。

BEGIN { 
    Studnet_Ids = "10,11,12,13";
    n=split(Studnet_Ids,array,",");
    count = 0;
    delete Stu_Found[0];
} 

{
    StuId=substr([=10=],5,2)
    n=length(array);
    if(length(array) !=0 && (StuId in array)){
         for (i=1;i<=n;i++) {
            if(array[i] == StuId){
            Stu_Found[count++]=StuId;
            }
         }
    }
}

无论我的方法是否正确,还是有更好的方法来处理这种情况,我都卡在这里了?

awk 救援!

$ awk '!a[substr([=10=],5,2)]++' file

288Y102RZDBPX1000000001dhana
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf

一个non-awk解决方案可以是(id将在输出中排序)

$ sort -s -k1.5,1.6 file | uniq -s4 -w2

288Y102RZDBPX1000000001dhana
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d