我有一个用于财运的数据文件,其中包含了许多重复的命运。我想把它们移走。
财富是由%描述的,所以一个示例财富文件可能如下所示:
%
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来解决这个问题,但是任何工具都可以。
发布于 2015-11-03 20:46:15
这是awk的工作
awk 'seen[$0]{next}{seen[$0]=1}1' RS='%' ORS='%' fortuneRS='%'意味着我们使用%作为记录分隔符。
seen[$0]检查我们是否已经看到了这个值。$0是整个记录,财富的文本,作为字符串。如果我们已经看到了值,我们将移动到下一个记录,不要打印任何东西。
{seen[$0]=1}将记录添加到查找表中。1打印当前记录,因为它始终是真的。注意,由于前面的next语句,这段代码只有在我们之前没有看到记录时才会执行。
ORS='%' set是%的输出记录分隔符。
发布于 2015-11-03 20:46:22
Awk能处理的。将记录分隔符设置为"%\n",然后打印唯一条目:
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
%
$https://stackoverflow.com/questions/33508604
复制相似问题