我希望 bash 脚本的一行或两行代码可以在 2.5G csv 文件的列中查找和打印重复的项目,但我知道经常重复的项目除外。
数据文件有一个标题,但它没有重复,所以我不担心解释标题的代码是否存在。
下面是数据的示例:
header,cat,Everquest,mermaid
1f,2r,7g,8c
xc,7f,66,rp
Kf,87,gH,||
hy,7f,&&,--
rr,2r,89,))
v6,2r,^&,!c
92,@r,hd,m
2r,2r,2r,2r
7f,7f,7f,7f
9,10,11,12
7f,2r,7f,7f
76,@r,88,u|
我正在寻找输出:
7f
@r
因为这两个都在第二列中重复。如您所见,2r 也是重复的,但它经常重复而且我知道,所以我只想忽略它。
需要明确的是,除了常见值之外,我不知道重复项的值,在我的真实数据文件中,它实际上是“无”一词。上面是'2r'。
我读了here我可以做类似的事情
awk -F, ' ++A[$2] > 1 { print $2; exit 1 } ' input.file
但是,我不知道如何跳过“2r”,也不知道++A 是什么意思。
我已经阅读了 awk 手册,但恐怕我对我提出的问题感到有些困惑。
此外,
uniq -d
根据其他一些问题和答案看起来很有希望,但我仍然不确定如何跳过我想忽略的值。
预先感谢您的帮助。
最佳答案
如何跳过“2r”:
$ awk -F, ' ++a[$2] == 2 && $2 != "2r" { print $2 } ' file
7f
@r
++a[$2]
将一个元素添加到哈希数组中,并将其值增加 1,即计算第二列中每个值的出现次数。
关于bash - Unix:在 csv 文件的列中查找重复项,省略一个可能的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537216/