1. ホーム
  2. shell

[解決済み] ソートせずに重複行を削除する[duplicate](重複)

2022-06-16 12:38:57

質問

Pythonでユーティリティスクリプトを作成しています。

#!/usr/bin/env python
import sys
unique_lines = []
duplicate_lines = []
for line in sys.stdin:
  if line in unique_lines:
    duplicate_lines.append(line)
  else:
    unique_lines.append(line)
    sys.stdout.write(line)
# optionally do something with duplicate_lines

この単純な機能( uniq をソートする必要がなく、安定した順序付け) は、単純な UNIX ユーティリティとして利用可能なはずですよね? パイプ内のフィルタの組み合わせとか?

質問の理由: 私がどこからでもPythonを実行できないシステム上でこの機能を必要とします。

どのように解決するのですか?

UNIX Bashスクリプトのブログ を提案します。 :

awk '!x[$0]++'

このコマンドは awk にどの行を表示するかを指示しています。変数 $0 は行の内容全体を保持し、角括弧は配列のアクセスです。つまり、ファイルの各行に対して、配列のノードである x のノードがインクリメントされ、そのノードの内容が ( ! )でない場合は、その行を表示する。