私はそれぞれ約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 { ... }
各ファイルの先頭から実行fnum++
ファイルカウンタを増やすdelete f
配列の削除これは使用されますファイルごとの冗長ラインフィルタリング(posix互換ソリューションリンクを参照)
!f[$0]++ { ... }
ファイルの最初の行でのみ実行(f[$0]
0(false)の場合)s[$0]++
行カウンタをインクリメントします。
END { ... }
前回実行for (l in s){if (s[l] == fnum) print l}
行を繰り返し、ファイル数と同じ回数で発生する各行を印刷します。
600,000行はメモリに十分です。それ以外の場合は、s
ブロックより小さいものfnum
をすべて削除する危険がありますBEGINFILE{...}
。