回答:
awkコマンドを、実行する列に変更して、重複した行を削除します(この場合、3番目の列)。
awk '!seen[$3]++' filename
このコマンドはawk
、印刷する行を指示しています。変数$3
は列3の内容全体を保持し、角括弧は配列アクセスです。そのため、filenameの行の3番目の列ごとに、指定された配列のノードseen
が増分され、そのnode(column3)の内容が!
以前に設定されていなかった場合()に行が印刷されます。
上記のawk
コマンドは、入力ファイル内の列が自分自身space
またはTab
その間に区切られている場合に機能します。列が他の何かで区切られている場合は、その-F
オプションでawkに伝える必要があります。したがって、たとえば、すべての列をコンマ(,
)で区切って、3番目の列の-F','
オプションに基づいて行を削除する場合。
awk -F',' '!seen[$3]++' filename
sort
コマンドは、巨大なファイルを処理するためにすでに最適化されています。したがって、sort
ファイルでコマンドを非常にうまく使用できます。
sort -u -t' ' -k3,3 file
-u
-一意の行のみを印刷します。 -t
-区切り文字を指定します。この例では、スペースを区切り文字として使用しています。-k3,3
-3番目のフィールドで並べ替えます。あなたは、GNUソートが実際に大きなファイルをソートするためのより良いアプローチであることを示唆するこの答えを参照することができます。あなたの場合、私はなし-parallel
でさえ、あなたは多くの時間遅延なしであなたの最終結果を達成できると思います。
-u
重複した行ではなく、重複したキーのみを削除するようにコメントしました...しかし、私は間違っています。