我有一个像这样的.csv文件:
stack2@example.com,2009-11-27 01:05:47.893000000,example.net,127.0.0.1
overflow@example.com,2009-11-27 00:58:29.793000000,example.net,255.255.255.0
overflow@example.com,2009-11-27 00:58:29.646465785,example.net,256.255.255.0
...
Run Code Online (Sandbox Code Playgroud)
我必须从文件中删除重复的电子邮件(整行)(即overflow@example.com上面示例中包含的一行).如何uniq仅在字段1上使用(以逗号分隔)?根据man,uniq没有列的选项.
我尝试了一些东西,sort | uniq但它不起作用.
我在Python中有一个实用程序脚本:
#!/usr/bin/env python
import sys
unique_lines = []
duplicate_lines = []
for line in sys.stdin:
if line in unique_lines:
duplicate_lines.append(line)
else:
unique_lines.append(line)
sys.stdout.write(line)
# optionally do something with duplicate_lines
Run Code Online (Sandbox Code Playgroud)
这个简单的功能(uniq无需先排序,稳定排序)必须作为简单的UNIX实用程序提供,不是吗?也许是管道中过滤器的组合?
询问的原因:在我无法从任何地方执行python的系统上需要此功能
如何找到唯一的行并从文件中删除所有重复项?我的输入文件是
1
1
2
3
5
5
7
7
Run Code Online (Sandbox Code Playgroud)
我希望结果如下:
2
3
Run Code Online (Sandbox Code Playgroud)
sort file | uniq不会做这个工作.将显示所有值1次
如何对uniq -c输出进行自然排序?
当计数<10时,uniq -c | sort输出看起来很好:
alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt
aaa
bbb
aa
cd
ada
aaa
bbb
aa
ccd
aa
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
1 ada
1 ccd
1 cd
2 aaa
2 bbb
3 aa
Run Code Online (Sandbox Code Playgroud)
但是当计数大于10甚至数千/数时,这种排序会混乱,因为它是按字符串排序而不是按自然整数排序:
alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\nnaa\nnaa\naa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnnaa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
10 naa
1 ada
1 ccd
1 cd
1 nnaa
2 aaa …Run Code Online (Sandbox Code Playgroud) 如何仅打印在文件中出现一次的那些行?例如,给定此文件:
mountain
forest
mountain
eagle
Run Code Online (Sandbox Code Playgroud)
输出将是这个,因为该行mountain出现两次:
forest
eagle
Run Code Online (Sandbox Code Playgroud)
我需要从Web日志中获取唯一的URL,然后对它们进行排序.我正在考虑使用grep,uniq,sort命令并将其输出到另一个文件
我执行了这个命令:
cat access.log | awk '{print $7}' > url.txt
Run Code Online (Sandbox Code Playgroud)
然后只获得唯一的一个并对它们进行排序:
cat url.txt | uniq | sort > urls.txt
Run Code Online (Sandbox Code Playgroud)
问题是我可以看到重复项,即使文件已排序,这意味着我的命令工作.为什么?
我有以下查询:
Article.joins(:themes => [:users]).where(["articles.user_id != ?", current_user.id]).order("Random()").limit(15).uniq
Run Code Online (Sandbox Code Playgroud)
并给我错误
PG::Error: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...s"."user_id" WHERE (articles.user_id != 1) ORDER BY Random() L...
Run Code Online (Sandbox Code Playgroud)
当我将原始查询更新为
Article.joins(:themes => [:users]).where(["articles.user_id != ?", current_user.id]).order("Random()").limit(15)#.uniq
Run Code Online (Sandbox Code Playgroud)
所以错误消失了...在MySQL .uniq工作,在PostgreSQL中没有.存在任何替代方案?
我正在使用Hive运行Hadoop作业实际上应该uniq在许多文本文件中排队.在reduce步骤中,它为每个键选择最近时间戳记录.
Hadoop是否保证具有相同键的每个记录(通过映射步骤输出)将转到单个reducer,即使在群集中运行了许多Reducer?
我担心在具有相同密钥的一组记录中间发生shuffle后,mapper输出可能会被拆分.
我有这样一个文件:
80.13.178.2
80.13.178.2
80.13.178.2
80.13.178.2
80.13.178.1
80.13.178.3
80.13.178.3
80.13.178.3
80.13.178.4
80.13.178.4
80.13.178.7
Run Code Online (Sandbox Code Playgroud)
我需要显示重复行的唯一条目(类似于uniq -d),但只发生两次以上的条目(两次是一个示例,因此可以灵活地定义下限.)
查找具有三次或更多次出现的条目时,此示例的输出应如下所示:
80.13.178.2
80.13.178.3
Run Code Online (Sandbox Code Playgroud)