【发布时间】:2017-09-12 21:00:02
【问题描述】:
当我发现它没有按预期工作时,我试图应用这里提出的方法 {Removing duplicates on a variable without sorting} 来使用 awk 删除字符串中的重复项。
例如,假设我们有:
s="apple apple tree appleapple tree"
删除重复项我们期望得到以下输出:
apple tree appleaplle
应该通过将以下命令应用于字符串来获得(完整说明在链接中):
awk 'BEGIN{RS=" "; ORS=" "}{ if(a[$0] == 0){a[$0]+=1; print $0}}' <<< $s
它使用关联数组,因此我们不希望打印两次相同的记录。但是,按照这种方法,我得到了这个
apple tree appleapple tree
第一个 apple 副本已按需要删除,但不是最后一个。
实际上,如果我们打印每条记录的长度,我们会看到最后一条记录不是tree,而是tree+ 返回字符(我想是这样)。
$ awk 'BEGIN{RS=" "; ORS=" "}{ print length($0); print $0}' <<< $s
$ 5 apple 5 apple 4 tree 10 appleapple 5 tree
注意最后一棵树确实是 5 个字符而不是 4 个字符,导致破坏了关联数组方法。
我不明白为什么会有这个角色,它是从哪里来的? 以及如何解决此问题以使用此方法删除重复项?
非常感谢您的任何建议
【问题讨论】:
-
使用
od -c scriptfile查看你的文件是否有CR+LF行尾,使用dos2unix修复。 -
这一次不是 CR+LF 问题,而是简单的飞行员错误。