我有一个大文件,我试图减少到只有相邻的重复记录id行。 (已经分类了)
示例:
AB12345 10987654321 Andy Male
AB12345 10987654321 Andrea Female
CD34567 98765432100 Andrea Female
EF45678 54321098765 Bobby Tables
应删除3-4行,留下1-2行。
以下正则表达式模式只能成功找到重复的行,但后续命令会删除一些但不是所有不匹配的行。
:/\v^(\a{2}\d{5}\s{2}\d{11}).*\n(\1.*)+
:g!/\v^(\a{2}\d{5}\s{2}\d{11}).*\n(\1.*)+/d
为什么不会删除所有不匹配的行?
答案 0 :(得分:1)
:global
没有“神奇”版本
可能的解决方案:转义特殊字符
:g!/^(\a\{2}\d\{5}\s\{2}\d\{11}).*\n(\1.*)\+/d
。
您可以随时重复使用以前的查找模式,并像g://d
额外链接
答案 1 :(得分:1)
不是Vim解决方案,但这应该有效:
$ fgrep -f <(awk -v OFS=' ' '{print $1, $2}' data.txt | sort | uniq -d) data.txt
<(...)
是一种基础,OSF=' '
只有两个空格。