如果您有一个包含多列的CSV /文本文件,即
domain, user
abc.com.au, Bob
abc.com.au, Marley
abc.com.au, Someone
nexle.dk, Daniel
nexle.dk, Dan
nexle.dk, John
nexle.dk, Doe
google.com, Larry
google.com, Sergey
如何通过第1列(域)获得前2个条目?
答案 0 :(得分:0)
我在Linux / Mac shell脚本解决方案上寻找年龄(查看awk,curl,sort,uniq等),但似乎不能轻易自己做,所以这是我写的一个应用程序:
https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java
基本上,如果你想获得前X个唯一条目,一旦你使用'sort'或其他任何东西对文件进行排序..它的Java可以在任何平台上运行(只需要用JDK编译 - 不不需要任何第三方图书馆。
答案 1 :(得分:0)
如果您的输入文件(例如domname.csv
)已将所有域分组在连续的行上(如您的示例所示),则:
$ tail -n +2 domname.csv | awk -F, 'BEGIN{dom=""; n=1} $1==dom && n<2 {print; n++} $1!=dom {print; dom=$1; n=1}'
制作(来自你的例子):
abc.com.au, Bob
abc.com.au, Marley
nexle.dk, Daniel
nexle.dk, Dan
google.com, Larry
google.com, Sergey
在此解决方案中,tail
只是为了摆脱标题(domain, user
),而awk
命令将分隔逗号上的每一行(-F,
) ,然后在第一次看到一个域(第一个字段$1
)时打印一行(设置计数n=1
和dom
);或者2)如果它在前一行($1==dom
)和n<2
中看到了域,则递增n
(到2),这样就不会打印出更多匹配的行。
如果域没有在连续的行上分组,即它们可以交错,如:
abc.com.au, Bob
nexle.dk, Daniel
abc.com.au, Marley
nexle.dk, Dan
然后,您仍然可以在sort
之后但在tail
之前使用awk
来抢救情况:
$ tail -n +2 domname.csv | sort | awk -F, ...
希望这有帮助。