我希望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
看起来很有希望基于其他一些问题和答案,但我仍然不确定如何跳过我想忽略的价值。
提前感谢您的帮助。
答案 0 :(得分:3)
如何跳过'2r':
Record::whereHas('customRecords', function ($query) use ($searchTerm) {
$query->where('custom_title', 'like', '%'.$searchTerm.'%');
})->with(['customRecords' => function ($query) use ($searchTerm) {
$query->where('custom_title', 'like', '%'.$searchTerm.'%');
}])->get(['id', 'another_field', 'another_field_2']);
$ awk -F, ' ++a[$2] == 2 && $2 != "2r" { print $2 } ' file
7f
@r
向哈希数组添加一个元素并将其值增加1,即计算第二列中每个值的出现次数。
答案 1 :(得分:0)
cut -d, -f2
sort
uniq -d
获取重复的行grep -Fv 2r
排除值,或grep -Fv -e foo -e bar …
排除多个值换句话说就是这样:
cut -d, -f2 input.csv | sort | uniq -d | grep -Fv 2r
根据数据,如果您在管道中先前移动grep
可能会更快,但您应该通过一些基准测试来验证。