ソートせずに列の重複項目に基づいて行を削除する

ソートせずに列の重複項目に基づいて行を削除する

3列の大きなファイル(約10,000行)があり、その行の3番目の列の内容が別の行の3番目の列に表示されるときに行を削除したいと思います。ファイルサイズのため、ソートがやや面倒で、行全体が列3の内容と同じではないため、以下のコードのようなものは使用できません。

awk '!seen[$0]++' filename

ベストアンサー1

awkコマンドを重複行を削除したい列(あなたの場合は3番目の列)に変更します。

awk '!seen[$3]++' filename

awkこのコマンドは印刷する行を知らせます。この変数は$3列3の内容全体を保持し、角かっこは配列アクセスです。したがって、ファイル名の3番目の列ごとに、そのノードseen(列3)の内容が以前!に設定されていない場合()、指定された配列のノードが増えて行が印刷されます。これにより、最初の行が常に保持されます(3番目の列のみ)。

上記は、入力ファイルの列がスペース/タブで区切られている場合に機能します。それ以外の場合は、optionsを使用してawkに通知する必要があります-F。たとえば、カンマ(,)で区切られた列があり、3番目の列に基づいて行を削除するには、次のコマンドを使用します。

awk -F',' '!seen[$3]++' filename

おすすめ記事