我有一个包含+100000项目的巨大列表,部分出现两次。 每个字符串的第一部分具有固定长度(在我的示例12中),相同字符串的第二部分和第三部分(如果存在)的长度可以不同。这些部分用冒号分开。
示例:
000188741550:michael:NY
000284557650:bob:CALIFORNIA
000284557650:ester:UTAH
000284601600:david
000284601600
000314885220:david
我想保留第一部分出现两次的项目(或删除仅出现一次的项目)
结果:
000284557650:bob:CALIFORNIA
000284557650:ester:UTAH
000284601600:david
000284601600
有没有办法使用grep
或sed
(我使用gnuwin)来完成这项工作?
答案 0 :(得分:1)
另一种选择是:
cat my_file | cut -d:-f1 | sort | uniq -d> duplicated_ids
然后,使用grep或fgrep检索原始记录:
fgrep -f duplicated_ids my_file
但是我不知道gnuwin上是否有fgrep,sort,cut。
答案 1 :(得分:0)
$ awk -F: '{cnt[$1]++; map[$1]=map[$1] $0 RS} END{for (key in map) if (cnt[key]>1) printf "%s",map[key]}' file
000284557650:bob:CALIFORNIA
000284557650:ester:UTAH
000284601600:david
000284601600