重複行を削除するが最初の出現を保持するLinuxコマンド


2

テキストファイルがあります。各行には文字列が含まれています。いくつかの文字列が繰り返されます。繰り返しを削除したいが、最初の出現を保持したい。例えば:

line1
line1
line2
line3
line4
line3
line5

あるべき

line1
line2
line3
line4
line5

試しましたsort file1 | uniq -u > file2が、これは役に立ちませんでした。最初のオカレンスを表示したいときに、繰り返されるすべての文字列を削除しました。並べ替える必要はありません。他のすべてをそのままにして、新しい行の文字列の正確な繰り返しを削除するだけです。

回答:


4

とにかくソートを許可する場合、これは動作します:

sort | uniq

-uあなたの問題の原因でした。なぜなら(からman 1 uniq):

-u--unique
一意の行のみを印刷します

一方、デフォルトでは:

オプションを指定しないと、一致する行が最初の出現箇所にマージされます。


1

最初の出現を維持しながら重複除去したい場合は、次のことができます

awk '!visited[$0]++' "$your_hist_file" > "$your_new_hist_file"

最後の出現を維持しながら重複除去したい場合は、次のことができます

tac "$your_hist_file" | awk '!visited[$0]++' | tac > "$your_new_hist_file"

これを実現するために1つのawkコマンドとno tacを使用できますが、2つtacのs を使用するのと同じくらい簡単です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.