web-dev-qa-db-ja.com

Linuxで重複しない行を削除する

linuxプログラムlinkesed、awk、またはその他を使用して、テキストファイルから重複しない行を削除するにはどうすればよいですか?

例:

abc
bbc
abc
bbc
ccc
bbc

結果:

abc
bbc
abc
bbc
bbc

2番目のリストでは、重複する行がなかったため、cccが削除されました。

重複していないAND行で重複が2つしかない行を削除し、重複行が2つ以上ある行を残すこともできますか?

4
qlwik

他の人が投稿した解決策は私のDebianJessieでは機能しません:それらは重複行のsingleコピーを保持しますが、allのコピーはOPの私の理解です重複する行は保持されます。 OPの権利を理解していれば、...

  1. 次のコマンド

    awk '!seen[$0]++' file
    

    重複する行をすべて削除します。

  2. 次のコマンド

    awk 'seen[$0]++' file 
    

    元のコピーではなく、すべての複製を出力します:ie、行が表示された場合n回、行n-1回を出力します。

  3. 次に、コマンド

    awk 'seen[$0]++' file > temp && awk '!seen[$0]++' file >> temp
    

    あなたの問題を解決します。行は元の順序ではありません。

  4. 2つ以上の重複がある行が必要な場合は、上記を繰り返すことができます。

    awk 'seen[$0]++' file | awk 'seen[$0]++' > temp
    

    n> 1の重複がある行のn-2コピーを保持します。今

    awk '!seen[$0]++' temp > temp1 
    

    一時ファイルからすべての重複行を削除し、必要なものを取得できるようになりました(ieの行のみn> 1重複)次のように:

    cat temp1 >> temp; cat temp1 >> temp
    
  5. [〜#〜] n [〜#〜]回以上出現する行に対してこれを行う必要がある場合は、次のコマンドを実行します。

      awk 'seen[$0]++ && seen[$0] > N' file 
    

    コマンドawk 'seen[$0]++' file[〜#〜] n [〜#〜]回連鎖させるよりも簡単です。

8
MariusMatutiae

これには、sortuniqコマンドを使用できます。

Abc.txtファイルのデータの場合、;

cat abc.txt |sort|uniq -d

出力は次のようになります。

abc 
bbc
3
UUU