首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除标记之间的重复文本

删除标记之间的重复文本
EN

Stack Overflow用户
提问于 2015-11-03 20:37:39
回答 2查看 70关注 0票数 4

我有一个用于财运的数据文件,其中包含了许多重复的命运。我想把它们移走。

财富是由%描述的,所以一个示例财富文件可能如下所示:

代码语言:javascript
复制
%
This is sample fortune 1
%
This is 
sample fortune 2
%
This fortune 
is repeated
%
This is sample fortune 3
%
This fortune 
is repeated
%
This fortune
is unique
%

正如您所看到的,财富可以跨越多条线,使这里的解决方案变得毫无用处。

我能做些什么才能找到并消除重复的命运呢?我考虑了一种让awk忽略以%开头的行的方法,但有些财富共享相同的行,但总体上并不相同(例如我的示例中的最后两行),所以这还不够。

到目前为止,我一直试图用awk来解决这个问题,但是任何工具都可以。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-03 20:46:15

这是awk的工作

代码语言:javascript
复制
awk 'seen[$0]{next}{seen[$0]=1}1' RS='%' ORS='%' fortune

RS='%'意味着我们使用%作为记录分隔符。

seen[$0]检查我们是否已经看到了这个值。$0是整个记录,财富的文本,作为字符串。如果我们已经看到了值,我们将移动到下一个记录,不要打印任何东西。

{seen[$0]=1}将记录添加到查找表中。1打印当前记录,因为它始终是真的。注意,由于前面的next语句,这段代码只有在我们之前没有看到记录时才会执行。

ORS='%' set是%的输出记录分隔符。

票数 4
EN

Stack Overflow用户

发布于 2015-11-03 20:46:22

Awk能处理的。将记录分隔符设置为"%\n",然后打印唯一条目:

代码语言:javascript
复制
awk 'BEGIN{RS="%\n"} { if (! ($0 in fortunes)) { fortunes[$0]++; print $0 "%"} }' data
%
This is sample fortune 1
%
This is 
sample fortune 2
%
This fortune 
is repeated
%
This is sample fortune 3
%
This fortune
is unique
%
$
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33508604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档