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