我有一个以下格式的文件,其中各列用逗号分隔。
[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
...
如何使用uniq
或AWK
针对特定列。
答案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 的值是单独打印的。
也可以看看: