1. ホーム
  2. bash

[解決済み] grepの出力に含まれる重複を削除する

2022-02-18 22:09:44

質問

次のようなパターンの結果ファイルを入手したケースがあります。

path:pattern found

例えば

./user/home/file1:this is a game

つまり、ある文字列を検索したときに、それを見つけたファイルと行を取得しました。

問題は、同じファイルに複数のケースがあることがあるので、重複するファイルを削除したいのです(ケースは異なるので不可能です)。

何かお手伝いやアイデアがありましたら、ぜひお聞かせください :)

最終的にはこれを回すことになります。

/user/home/desktop/file1:this is a game
/user/home/desktop/file1:what kind of game
/user/home/desktop/file1:fast action game

を、ファイル内の残りのすべてのデータを失うことなく、最初に見つかった結果だけにすることができます。

Update1です。

というわけで、実際のファイルはこんな感じです。

/user/home/desktop/file1:this is a game
/user/home/desktop/file1:what kind of game
/user/home/desktop/file1:fast action game
/user/home/desktop/file2:a game
/user/home/desktop/file3:of game
/user/home/desktop/file4:fast game

同じファイルに何度も出てくるのを解消したいので、以下のようになります。

/user/home/desktop/file1:this is a game
/user/home/desktop/file2:a game
/user/home/desktop/file3:of game
/user/home/desktop/file4:fast game

解決方法は?

を使用することができます。 sort -u :

grep pattern files | sort -t: -u -k1,1

  • -t: - デリミターとして : を使用
  • -k1,1 - 最初のフィールドのみに基づいてソートする
  • -u - 重複を削除(最初のフィールドに基づく)

これは、重複を排除して、1つの出現ファイルだけを保持します。

この例では、次のような出力が得られます。

/user/home/desktop/file1:this is a game

万が一、1つのファイルで複数の異なるマッチングを探している場合。

grep pattern files | sort -u