GNU/Linux >> Linux の 問題 >  >> Linux

並べ替えなしで1列内の重複に基づいて行を削除しますか?

大きな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
  1. grep でテキスト ファイルの空行を削除する

  2. Linuxシェルは、2番目の列に従ってファイルをソートしますか?

  3. 確認せずにファイルを削除する

  1. テキストファイル内の重複行を削除するにはどうすればよいですか?

  2. アクティブなログ ファイルから最初の N 行を削除する

  3. rm を使わずにファイルを削除するには?

  1. 特定の列の重複フィールドを削除しますか?

  2. フィールド内の重複する値を削除しますか?

  3. 出力を列で並べ替えますか?