2

重複を逆の順序で削除したいコマンドから stdout を取得しました。

つまり、重複した行を最後ではなく最初から削除したいのです。たとえば、最後から剥がすには、古典的なテクニックを次のように使用しawkます。

awk '!a[$0]++'

見事ですが、間違った行を取り除きます。

$ printf 'one\nfour\ntwo\nthree\nfour\n' | awk '!a[$0]++'
one
four
two
three

four印刷の最後の出現が欲しい

$ printf 'one\nfour\ntwo\nthree\nfour\n' | <script>
one
two
three
four

どうすればいいですか?シェルでワンライナーを使用する簡単な方法はありますか?

4

2 に答える 2

2

実際には、ゴティテクニック( rev)GNU awkを使用しますが、最後のオカレンスを出力する単一のスクリプトを次に示します。

command | awk '{a[$0]=NR;b[NR]=$0}END{n=asort(a);for(i=1;i<=n;i++)print b[a[i]]}'
one
two
three
four
于 2013-10-08T21:22:11.740 に答える