文字列のリストを含むファイルがあります。一意の文字列を、ファイルに最初に表示される順序で抽出したいと思います。
したがって、たとえば、私のファイルに次のものが含まれている場合:
foo
bar
foo
bar
baz
bar
foo
出力したい:
foo
bar
baz
一意の値が必要な場合は、を使用できますsort input|uniq
が、これにより結果がアルファベット順に並べ替えられます。
文字列のリストを含むファイルがあります。一意の文字列を、ファイルに最初に表示される順序で抽出したいと思います。
したがって、たとえば、私のファイルに次のものが含まれている場合:
foo
bar
foo
bar
baz
bar
foo
出力したい:
foo
bar
baz
一意の値が必要な場合は、を使用できますsort input|uniq
が、これにより結果がアルファベット順に並べ替えられます。
awkでは非常に単純です:
awk '!a[$0]++'
単純なPerlソリューション:
perl -ne 'print unless $seen{$_}++'
最後の行に改行が含まれていない場合は、次のように変更する必要があります。
perl -nE 'chomp; say unless $seen{$_}++'
ニックが目指していたのは次のようなものだと思います。
sort test.txt | uniq | xargs -I{} grep -Fnxm1 {} test.txt | sort -k1n -t: | cut -f2 -d:
あるいは、彼の提案を読みすぎているのかもしれません。awk
しかし、答えはもっとクールだと思います。
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
私はそれを完全に理解することはできませんが、次のようなものです:
sort test.txt | uniq | xargs -0 -I {} grep {} test.txt
多分誰かが修正できますか?