列 2 がある場合、重複行を削除します。

列 2 がある場合、重複行を削除します。

私は次のような10,000を超える行のサンプルデータを使って作業しています。

hxxp://google.com 
hxxp://google.com "Seen"
hxxp://yahoo.com "Check again"
hxxp://yahoo.com 
hxxp://about.com
hxxp://x.com
hxxp://y.com
hxxp://z.com
hxxp://reddit.com
hxxp://a.com "good"
hxxp://a.com
hxxp://b.com "good"
hxxp://c.com
hxxp://c.com "good"
hxxp://c.com

私はこれらの結果を達成する方法を見つけるために苦労してきました。

hxxp://google.com "Seen"
hxxp://yahoo.com "Check again"
hxxp://about.com
hxxp://x.com
hxxp://y.com
hxxp://z.com
hxxp://reddit.com
hxxp://a.com "good"
hxxp://b.com "good"
hxxp://c.com "good"

サンプルデータには重複した行がある可能性があります。重複した行がある場合は、2番目の列が欠落している行を削除します。区切り記号は空白です。

awk -F' ' '!seen[$1]++' dupe.txt > clean.txt

これは私にぴったりの裏地ではないようだ。

ベストアンサー1

$ LC_ALL=C sort -r <file | LC_ALL=C sort -k1,1 -us
hxxp://a.com "good"
hxxp://about.com
hxxp://b.com "good"
hxxp://c.com "good"
hxxp://google.com "Seen"
hxxp://reddit.com
hxxp://x.com
hxxp://y.com
hxxp://yahoo.com "Check again"
hxxp://z.com

最初は、sort行全体をソートキーとして使用し、ファイルを逆順にソートします。これにより中間結果が生成されます。

hxxp://z.com
hxxp://yahoo.com "Check again"
hxxp://yahoo.com
hxxp://y.com
hxxp://x.com
hxxp://reddit.com
hxxp://google.com "Seen"
hxxp://google.com
hxxp://c.com "good"
hxxp://c.com
hxxp://c.com
hxxp://b.com "good"
hxxp://about.com
hxxp://a.com "good"
hxxp://a.com

与えられたサンプルデータ。追加のコメントを含む行は、常に追加のコメントがない行の前にあることに注意してください。

2番目は、sort一意のソートキーを持つ行のみを生成します。最初のフィールド(URL)のみをソートキーとして使用します。また、sort「安定した」ソートアルゴリズムを使用する必要があります-s。これは、同じキーを持つ行の順序が入力順序を変更しないことを意味します。

-u組み合わせは、-s重複したURLを含む追加のコメント行のみを提供します。

このビットは、適切なロケールを取得し、行が正しく機能するように正しく配置されるようにするLC_ALL=Cためのものです。sort

おすすめ記事