bra*_*ter 224 bash ksh unique distinct sh
我有一个ksh脚本,它返回一长串值,换行符分隔,我想只看到唯一/不同的值.有可能这样做吗?
例如,假设我的输出是目录中的文件后缀:
Run Code Online (Sandbox Code Playgroud)tar gz java gz java tar class class
我希望看到如下列表:
Run Code Online (Sandbox Code Playgroud)tar gz java class
Mat*_*ley 405
您可能想要查看uniq和sort应用程序.
./yourscript.ksh | sort | uniq
(仅供参考,是的,在此命令行中必须排序,uniq只删除紧接在彼此之后的重复行)
编辑:
与Aaron Digulla发布的有关uniq命令行选项的内容相反:
鉴于以下输入:
class jar jar jar bin bin java
uniq 将输出所有行一次:
class jar bin java
uniq -d 将输出出现多次的所有行,并将打印一次:
jar bin
uniq -u 将输出所有出现一次的行,它将打印一次:
class java
gpo*_*ojd 82
./script.sh | sort -u
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 10
对于可能不需要排序的较大数据集,您还可以使用以下perl脚本:
./yourscript.ksh | perl -ne 'if (!defined $x{$_}) { print $_; $x{$_} = 1; }'
Run Code Online (Sandbox Code Playgroud)
这基本上只记住每一行输出,以便它不再输出.
它具有优于" sort | uniq"解决方案的优点,因为预先不需要排序.
Dim*_*lov 10
使用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
Run Code Online (Sandbox Code Playgroud)
或者您可以使用AWK:
% awk '!_[$0]++' infile
tar
more than one word
gz
java
class
Run Code Online (Sandbox Code Playgroud)