如何在不排序的情况下删除重复行?

如何在不排序的情况下删除重复行?

我想删除重复的行而不对行进行排序。我还想忽略前导空格。

猫测试.txt

 abc 

  def

pqr

      abc        

    xyz

             def 

    efg

那么输出应该是,

abc

def

pqr

xyz

efg

答案1

尝试这个:

$ awk 'NF && !($1 in a){a[$1];p=$1;print (getline == 0) ? p : p"\n"}' cat
abc

def

pqr

xyz

efg

解释

  • NF && !($1 in a):我们只处理非空行且该值尚未出现在关联数组中的行a
  • a[$1]:如果值没有出现,我们将其保存到关联数组中a
  • p=$1;print (getline == 0) ? $1 : p"\n":我们将值保存在变量中p。如果不是文件结尾,则打印变量p换行,如果文件结尾,则仅打印p值。

答案2

这个命令应该可以工作。

awk '{$1=$1}1' filename | awk ' !x[$0]++'

第一个 awk 命令删除文件中的所有前导空格,第二个 awk 命令仅打印唯一元素。

答案3

如果你想删除全部重复项(包括重复的空行)

awk '{if ($1 in a) next; a[$1]=$0; print}' test.txt

如果你想保留重复的空行

awk '/^$/ {print; next} {if ($1 in a) next; a[$1]=$0; print}' test.txt

答案4

使用unique命令的示例karrick/unique:

$ cat test.txt | tr -d ' ' | unique
abc

def
pqr
xyz
efg

相关内容