私は Unix シェル スクリプトの初心者です。重複を見つけるためのいくつかの異なる方法を知っています。ただし、元の順序を維持しながら重複を削除する簡単な方法を見つけることができません ( sort -u を使用すると元の順序が失われるため)。
例: 呼び出されるスクリプトdedupe.sh
サンプルラン:
dedupe.sh
cat dog cat bird fish bear dog
結果:cat dog bird fish bear
パールって言った?
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
ああ、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"