我想删除重复的行而不对行进行排序。我还想忽略前导空格。
猫测试.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