2

文字列のリストを含むファイルがあります。一意の文字列を、ファイルに最初に表示される順序で抽出したいと思います。

したがって、たとえば、私のファイルに次のものが含まれている場合:

foo
bar
foo
bar
baz
bar
foo

出力したい:

foo
bar
baz

一意の値が必要な場合は、を使用できますsort input|uniqが、これにより結果がアルファベット順に並べ替えられます。

4

5 に答える 5

12

awkでは非常に単純です:

awk '!a[$0]++'
于 2012-10-27T21:41:58.253 に答える
4

単純なPerlソリューション:

perl -ne 'print unless $seen{$_}++'

最後の行に改行が含まれていない場合は、次のように変更する必要があります。

perl -nE 'chomp; say unless $seen{$_}++'
于 2012-10-27T21:23:04.460 に答える
2

ニックが目指していたのは次のようなものだと思います。

sort test.txt | uniq | xargs -I{} grep -Fnxm1 {} test.txt | sort -k1n -t: | cut -f2 -d:

あるいは、彼の提案を読みすぎているのかもしれません。awkしかし、答えはもっとクールだと思います。

于 2012-10-28T04:06:33.200 に答える
1

bash 4:

declare -A seen
while read line; do 
  if (( ! seen["$line"]++ )); then 
    echo "$line"
  fi
done <file.txt

bash <= 3の場合、chorobaのperlソリューションやawkなど、連想配列を持つ他の何かを使用します。

awk '!seen[$0]++' file.txt
于 2012-10-27T21:33:46.080 に答える
-1

私はそれを完全に理解することはできませんが、次のようなものです:

sort test.txt | uniq | xargs -0 -I {} grep {} test.txt

多分誰かが修正できますか?

于 2012-10-27T21:35:38.137 に答える