テキストファイルから一意の文字列を削除する方法は?

テキストファイルから一意の文字列を削除する方法は?

申し訳ありません。クエリを正しく表現していないため、例を修正する必要がありました。 .txtファイルがあるとしましょう。

Happy sad
Happy sad
Happy sad
Sad happy
Happy sad
Happy sad
Mad sad
Mad happy
Mad happy

一意の文字列を削除したいです。ファイルを残してください:

Happy sad
Happy sad
Happy sad
Happy sad
Happy sad
Mad happy
Mad happy

私はソートが重複()を削除できることを知っていますsort file.txt | uniq。それでは、bashでその逆を実行するためにコマンドを使用できますか?それともwhileループを調べる必要がありますか?ところでuniq -D file.txt > output.txt動作しません。

ベストアンサー1

使用awk:

$ awk 'seen[$0]++; seen[$0] == 2' file
Happy sad
Happy sad
Happy sad
Happy sad
Happy sad
Mad happy
Mad happy

これは、各行のテキストを連想配列のキーとして使用しますseen。最初は、以前に見たseen[$0]++行が印刷されるようにします。なぜなら、その行に関連付けられた値は、2行目以降の行が表示されたときにゼロではないからです。seen[$0] == 2その行が2番目に表示されている場合は、その行が再印刷されます(それ以外の場合は、繰り返される各行の1つの項目を見逃す可能性があります)。

awk '!seen[$0]++'時々使われるのと似ています。 削除するソートせずに繰り返します(例:awk '!a[$0]++' はどのように機能しますか?)。


重複行のコピーを1つだけ取得します。

awk 'seen[$0]++ == 1' file

または、

sort file | uniq -d

おすすめ記事