如何基于多个动态列删除重复项

如何基于多个动态列删除重复项

使用 bash(awk),如何从基于多列的管道分隔文件中删除重复项,但需要将列作为输入参数传递。我的文件中有以下数据

Insert|val1|val2|val3|val4 
Insert|val1a|val2|val3a|val4

我想根据输入参数删除重复项。有时我希望使用位置 1 和位置 3 删除行,有时使用位置 2 和位置 3 删除行。我正在用这个

 awk -F, '!seen[$1,$3 ]++ '

但不知道如何参数化 $1,$2

答案1

这可能就是您想要做的:

$ awk -v c='1 3' -F'|' 'BEGIN{split(c,k," ")} {key=""; for (i in k) key=key FS $(k[i])} !seen[key]++' file
Insert|val1|val2|val3|val4

相关内容