我有一个ksh脚本,它返回一个长列表的值,换行符分隔,我想只看到唯一的/不同的值。这是可能的吗?

例如,我的输出是一个目录下的文件后缀:

焦油 广州 java 广州 java 焦油 类 类

我想看到这样的列表:

焦油 广州 java 类


当前回答

我得到了一个更好的提示,以获得文件中不重复的条目

awk '$0 != x ":FOO" && NR>1 {print x} {x=$0} END {print}' file_name | uniq -f1 -u

其他回答

用zsh你可以这样做:

% cat infile 
tar
more than one word
gz
java
gz
java
tar
class
class
zsh-5.0.0[t]% print -l "${(fu)$(<infile)}"
tar
more than one word
gz
java
class

或者你可以使用AWK:

% awk '!_[$0]++' infile    
tar
more than one word
gz
java
class

使用AWK你可以做到:

 ./yourscript.ksh | awk '!a[$0]++'

我发现它比sort和uniq快

我得到了一个更好的提示,以获得文件中不重复的条目

awk '$0 != x ":FOO" && NR>1 {print x} {x=$0} END {print}' file_name | uniq -f1 -u

通过sort和uniq对它们进行管道处理。这将删除所有重复项。

Uniq -d只给出重复项,Uniq -u只给出唯一项(条带重复项)。

./script.sh | sort -u

这和一氧化碳的答案是一样的,但是更简洁一点。