类似于搜索的vlookup的CLI方法

时间:2018-07-30 10:28:00

标签: regex bash unix awk grep

我有一个巨大的csv文件demo.csv(大小为GB),其中包含3列,如下所示:

$ cat demo.csv
call_start_time,called_no,calling_no
43284.85326,1111111111,2222222222
43284.83192,3333333333,1111111111
43284.83205,2222222222,1111111111
43284.81304,4444444444,3333333333

我试图在第2列或第3列(无论顺序如何)中找到具有重复值的行。例如,这应该是上面显示的数据的输出:

call_start_time,called_no,calling_no
43284.85326,1111111111,2222222222
43284.83205,2222222222,1111111111

我尝试使用csvkit:

csvsql --query "select called_no, calling_no, call_start_time, count(1) from file123 group by called_no,calling_no having count(1)>1" file123.csv > new.csv

2 个答案:

答案 0 :(得分:1)

使用awk,您可以构建一个关联数组a,其中记录作为值,键k的构建是将字段$ 2和$ 3排序并用管道连接。

awk -F, 'NR==1; { k=($3<$2) ? $3"|"$2 : $2"|"$3; if (a[k]) { if (a[k]!="#") {print a[k];a[k]="#"} print} else a[k]=$0}' file

如果当前记录具有已存在的键,则将打印存储的记录(仅在第一次时),并且也会打印当前记录。

答案 1 :(得分:0)

Xamarin.Firebase