如何将项目保存在部分"的文本文件中使用grep或sed或......发生两次?

时间:2015-08-12 00:08:50

标签: regex sed grep

我有一个包含+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

有没有办法使用grepsed(我使用gnuwin)来完成这项工作?

2 个答案:

答案 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