Eno*_*Eno 178 linux sorting shell uniq
我有一个像这样的.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但它不起作用.
Car*_*icz 305
sort -u -t, -k1,1 file
Run Code Online (Sandbox Code Playgroud)
-u 独一无二-t, 所以逗号是分隔符-k1,1 关键领域1测试结果:
overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0
stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 96
awk -F"," '!_[$1]++' file
Run Code Online (Sandbox Code Playgroud)
-F 设置字段分隔符.$1 是第一个领域._[val]查找val哈希_(常规变量).++ 递增,并返回旧值.! 返回逻辑不.Pra*_*ash 15
要考虑多列.
根据第1列和第3列排序并提供唯一列表:
sort -u -t : -k 1,1 -k 3,3 test.txt
Run Code Online (Sandbox Code Playgroud)
-t : 冒号是分隔符-k 1,1 -k 3,3 基于第1列和第3列或者如果你想使用uniq:
<mycvs.cvs tr -s ',' ' ' | awk '{print $3" "$2" "$1}' | uniq -c -f2
得到:
1 01:05:47.893000000 2009-11-27 tack2@domain.com
2 00:58:29.793000000 2009-11-27 overflow@domain2.com
1
Run Code Online (Sandbox Code Playgroud)
小智 5
如果要保留重复项的最后一个,可以使用
tac a.csv | sort -u -t, -r -k1,1 |tac
Run Code Online (Sandbox Code Playgroud)
这是我的要求
这里
tac 将逐行反转文件