Sed 如果字段重复,请删除行

Sed 如果字段重复,请删除行,sed,awk,Sed,Awk,如果第一个字段是重复的,则查找awk(或sed)一行程序以从输出中删除行 我看到的删除重复行的示例如下: awk 'a !~ $0; {a=$0}' 尝试使用它的基础上没有运气(我认为改变$0的$1的会做的把戏,但似乎没有工作) 这是关联数组的标准(非常简单)用法。这是如何删除重复项 awk '!_[$1]++' file awk '!a[$1]++' file_name 如果您愿意使用Perl: perl -ane 'print if ! $a{$F[0]}++' file -a将行自

如果第一个字段是重复的,则查找awk(或sed)一行程序以从输出中删除行

我看到的删除重复行的示例如下:

awk 'a !~ $0; {a=$0}'
尝试使用它的基础上没有运气(我认为改变$0的$1的会做的把戏,但似乎没有工作)


这是关联数组的标准(非常简单)用法。

这是如何删除重复项

awk '!_[$1]++' file
awk '!a[$1]++' file_name

如果您愿意使用Perl:

perl -ane 'print if ! $a{$F[0]}++' file
-a
将行自动拆分到
@F
数组中,该数组从0开始索引
%a
散列将记住是否已看到第一个字段


此相关解决方案假定字段分隔符是逗号,而不是空格

perl -F, -ane 'print if ! $a{$F[0]}++' file

它打印副本的唯一值和单一值

awk '!_[$1]++' file
awk '!a[$1]++' file_name

您要求删除行“如果第一个字段匹配”。。。什么?我假设‘与前一个输入行中的第一个字段的值相同’;另一个人假设“某种特定的模式”。你打算干什么?你更改的版本
awk'a!~$1.{a=$1}'
适用于我处理相邻的重复项(例如,排序文件)。Jonathan Leffler的版本的优点是可以删除未排序文件上的重复项,但代价是创建一个潜在的大数组。我认为我的主要问题是我在处理几种不同类型的字段分隔符,并且没有正确定义FS!我还有一个我没有意识到的bug,它可能也给我带来了问题。谢谢使用‘‘’作为数组名会引起误解,但它是有效的。