我是一个Unix shell脚本新手。我知道几种不同的方法来查找重复项。但是在保持原始顺序的同时找不到删除重复项的简单方法(因为使用sort -u会丢失原始顺序)。
示例:名为dedupe.sh
的脚本
示例运行:
dedupe.sh
cat dog cat bird fish bear dog
结果为:cat dog bird fish bear
答案 0 :(得分:2)
使用awk:
$ printf '%s\n' cat dog cat bird fish bear dog | awk '!arr[$1]++'
cat
dog
bird
fish
bear
或
$ echo 'cat dog cat bird fish bear dog' | awk '!arr[$1]++' RS=" "
或
$ printf '%s\n' cat dog cat bird fish bear dog | sort -u
如果它在shell中有效,它将在脚本中运行=)
答案 1 :(得分:1)
你说过Perl吗?
perl -e 'while($_=shift@ARGV){$seen{$_}++||print}print"\n" ' \
cat dog cat bird fish bear dog
同等地,dedupe.pl
包含:
#!/usr/bin/perl
while ($w = shift @ARGV) {
$seen{$w}++ || print "$w";
}
print "\n";
现在chmod u+x dedupe.pl
和:
./dedupe.pl cat dog cat bird fish bear dog
无论哪种方式,输出都是所希望的。
cat dog bird fish bear
答案 2 :(得分:0)
啊啊perl ...只写语言。 :)
只要您使用其他脚本语言,不妨考虑一些可读的东西。 :)
#!/usr/bin/env ruby
puts ARGV.uniq.join(' ')
表示:
puts = "print whatever comes next"
ARGV = "input argument array"
uniq = "array method to perform the behavior you're looking for and remove duplicates"
join(' ') = "join with spaces instead of default of newline. Not necessarily needed if you're piping to something else"