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

如何使用AWK提取每个学生的唯一记录?,awk,sed,gawk,Awk,Sed,Gawk,我正在尝试处理学生的反馈文件 情景: 第5和第6个字符是sutdent id 一名学生可以提供多个反馈 提取每个学生的第一次反馈 学生反馈.txt: 288Y102RZDBP100000001Dhana 10Q115W4ZEAV18LXNPSPGRTTIDBN100000005EGW JP2F1164EI100000002D EU9V103IXI1000000003DFG1000000001DFDS XATS11SSSFOO4dhanaUXIBB7TF71000000004adf 10Q11

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

情景:

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

288Y102RZDBP100000001Dhana 10Q115W4ZEAV18LXNPSPGRTTIDBN100000005EGW JP2F1164EI100000002D EU9V103IXI1000000003DFG1000000001DFDS XATS11SSSFOO4dhanaUXIBB7TF71000000004adf 10Q115W4ZEAV18LXNPSPGRTTIDBN100000005EGW

我尝试过的方法:

我想创建一个数组来指定学生id(因为我可以给出特定学生的反馈),并通过awk和extract stud 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;
            }
         }
    }
}
开始{
Studnet_id=“10,11,12,13”;
n=拆分(Studnet_id,数组,“,”);
计数=0;
删除找到的Stu_[0];
} 
{
StuId=substr($0,5,2)
n=长度(数组);
如果(长度(数组)!=0&&(数组中的StuId)){

为了(i=1;i
awk
救援

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

288Y102RZDBPX1000000001dhana
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf
可以使用非awk解决方案(id将在输出中排序)


感谢您的输入。我将尝试更新状态。
$ sort -s -k1.5,1.6 file | uniq -s4 -w2

288Y102RZDBPX1000000001dhana
XATS11SSSFOO4dhanaUXIBB7TF71000000004adf
10Q115W4ZEAV18LXNPSPGRTTIDHBN1000000005egw JP2F1164EI1000000002d