linuxプログラムlinkesed、awk、またはその他を使用して、テキストファイルから重複しない行を削除するにはどうすればよいですか?
例:
abc
bbc
abc
bbc
ccc
bbc
結果:
abc
bbc
abc
bbc
bbc
2番目のリストでは、重複する行がなかったため、cccが削除されました。
重複していないAND行で重複が2つしかない行を削除し、重複行が2つ以上ある行を残すこともできますか?
他の人が投稿した解決策は私のDebianJessieでは機能しません:それらは重複行のsingleコピーを保持しますが、allのコピーはOPの私の理解です重複する行は保持されます。 OPの権利を理解していれば、...
次のコマンド
awk '!seen[$0]++' file
重複する行をすべて削除します。
次のコマンド
awk 'seen[$0]++' file
元のコピーではなく、すべての複製を出力します:ie、行が表示された場合n回、行n-1回を出力します。
次に、コマンド
awk 'seen[$0]++' file > temp && awk '!seen[$0]++' file >> temp
あなたの問題を解決します。行は元の順序ではありません。
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
[〜#〜] n [〜#〜]回以上出現する行に対してこれを行う必要がある場合は、次のコマンドを実行します。
awk 'seen[$0]++ && seen[$0] > N' file
コマンドawk 'seen[$0]++' file
を[〜#〜] n [〜#〜]回連鎖させるよりも簡単です。
これには、sort
&uniq
コマンドを使用できます。
Abc.txtファイルのデータの場合、;
cat abc.txt |sort|uniq -d
出力は次のようになります。
abc
bbc