大きな3列のファイル(〜10,000行)があり、その行の3番目の列の内容が別の行の3番目の列に表示されたときに行を削除したいと思います。ファイルのサイズによって並べ替えが少し面倒になります。行全体が同一ではないため、以下のコードのようなものは使用できません。 3列目の内容だけです。
awk '!seen[$0]++' filename
承認された回答:
awkコマンドを、その列(この場合は3番目の列)に基づいて重複した行を削除する列に変更するだけです。
awk '!seen[$3]++' filename
このコマンドはawk
に指示しています 印刷する行。変数$3
列3の内容全体を保持し、角括弧は配列アクセスです。したがって、filenameの行の3列ごとに、seen
という名前の配列のノードが表示されます。 そのノード(column3)のコンテンツが(!
でない場合は、がインクリメントされ、行が出力されます。 )以前に設定しました。
上記は、入力ファイルの列がスペース/タブで区切られている場合に機能します。それ以外の場合は、-F
でawkするように指示する必要があります。 オプション。したがって、たとえば、列がコンマ(,
で区切られている場合) )、3番目の列に基づく行を削除する場合は、次のようにコマンドを使用します。
awk -F',' '!seen[$3]++' filename
Linux – OracleJava7をSetcapCap_net_bind_service+ epと連携させる方法は?
Linuxソースルーティング、ストロングエンドシステムモデル/ストロングホストモデル?