如何使用AWK提取每个学生的独特记录?

时间:2018-02-21 21:38:31

标签: awk sed gawk

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

情景:

  • 第5和第6个字符是sutdent id
  • 一名学生可以提供多项反馈
  • 提取每位学生的第一反馈

students_feedback.txt:

  

288Y的 10 2RZDBPX1000000001dhana   10Q1 15 W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d   EU9V的 10 3IXI1000000003dfg1000000001dfdfds   XATS的 11 SSSFOO4dhanaUXIBB7TF71000000004adf   10Q1的 15 W4ZEAV18LXNPSPGRTTIDHBN1000000005egw

方法我尝试过:

我想创建一个数组来指定学生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($0,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;
            }
         }
    }
}

无论我的方法是否正确,还是有更好的方法来完成这种情况,我都被困在这里了?

1 个答案:

答案 0 :(得分:1)

awk救援!

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

288Y102RZDBPX1000000001dhana
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf

非awk解决方案可以(id&#39; s将在输出中排序)

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

288Y102RZDBPX1000000001dhana
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d