从特定列中删除重复项

从特定列中删除重复项

我有一个以下格式的文件,其中各列用逗号分隔。

[1], Value1,   UAC,                 AB
[2.2], Check1, BOH D2A D2A BOH,     SD
[63], name2,   MFB MFB,              k
...

我想从列(例如第三列)中删除重复值,如下所示:

[1], Value1,   UAC,             AB
[2.2], Check1, BOH D2A ,        SD
[63], name2,   MFB,              k
...

如何使用uniqAWK针对特定列。

答案1

awk

awk -F, '{
    printf $1 FS $2 FS; 
    split($3, arr, / +/); for(val in arr) !uniq_arr[ arr[val] ]++;
    for (key in uniq_arr) { 
        printf (key!="")? SPACE key:""; SPACE=" "; delete uniq_arr[key]
    };
    printf FS $4"\n"
}' infile

[1], Value1, UAC, AB
[2.2], Check1, D2A BOH, SD
[63], name2, MFB, k
  • 这将根据空格分隔符split($3, arr, / +/)将第 3 列拆分为数组arr(可能会有一个或多个空格作为分隔符)。

  • 在 中for(val in arr) !uniq_arr[ arr[val] ]++,我们正在创建一个新数组,其中删除了从 array 中获取的重复值arr;因此数组中的最终值uniq_arr只是每列中的唯一值3。

  • 接下来我们只是打印保存的值uniq_arr并在打印后删除该键;请注意,column#1、#2 和 #4 的值是单独打印的。

也可以看看:

答案2

在此输入图像描述

uniq -f 选项可以帮助您,请检查

相关内容