60個の大容量ファイルを比較し、すべてのファイルに共通のラインのみ出力

60個の大容量ファイルを比較し、すべてのファイルに共通のラインのみ出力

私はそれぞれ約10,000行を含む60個のファイルを持っています。各行には文字列が含まれています。

すべてのファイルに共通の文字列を見つけたいです。

正確に一致するものが必要なので、行全体を比較します。

ベストアンサー1

この試み、

awk '
    BEGINFILE{fnum++; delete f;}
    !f[$0]++{s[$0]++;}
    END {for (l in s){if (s[l] == fnum) print l}}
' files*

説明する:

  • BEGINFILE { ... }各ファイルの先頭から実行

  • !f[$0]++ { ... }ファイルの最初の行でのみ実行(f[$0]0(false)の場合)

    • s[$0]++行カウンタをインクリメントします。
  • END { ... }前回実行

    • for (l in s){if (s[l] == fnum) print l}行を繰り返し、ファイル数と同じ回数で発生する各行を印刷します。

600,000行はメモリに十分です。それ以外の場合は、sブロックより小さいものfnumをすべて削除する危険がありますBEGINFILE{...}

おすすめ記事