2つのフラットファイルAとBを比較して、B内のすべてのレコードがAにもあることを確認します。

2つのフラットファイルAとBを比較して、B内のすべてのレコードがAにもあることを確認します。

2つのフラットファイルAとBがあります。 Aは何百万ものレコードを含む大容量ファイルで、BはAのサブセットでなければなりません。 Aには一意のキーを持つ20個の列があり、Bには同じ一意のキーを持つ5つの列があります。 BとAを比較して、ファイルBのレコードがファイルAにも存在し、その列に同じデータがあることを確認する方法を教えてください。

ベストアンサー1

私のコマンドを表示するために2つのファイルを作成しました。

file1:

1 a1 b1 c1 d1 e1
2 a2 b2 c2 d2 e2
3 a3 b3 c3 d3 e3
4 a4 b4 c4 d4 e4
5 a5 b5 c5 d5 e5

file2:

2 b2 c2 e2
4 b4 c4 xx
5 b5 c5 e5

最初の列は一意のキーです。一般的な列にはbcおよびが含まれますe。一般的な行は24およびです5。行4の列に異なる値がありますe

出力を含むコマンドは次のとおりです。

$ comm -1 -3 <(cut -d' ' -f1,3,4,6 file1) file2
4 b4 c4 xx

ファイルがまだソートされていない場合は、次のことができます。

$ comm -1 -3 <(cut -d' ' -f1,3,4,6 file1 | sort) <(sort file2)

説明する:

cut -d' ' -f1,3,4,6 file1

ファイルのフィールド番号1、3、4、6を印刷します。フィールドはスペースで区切られます。フィールドがコンマで区切られている場合は、cut以下を使用してください。cut -d','

<( ... )

プロセスの置き換え

comm -1 -3 file1 file2

file2に固有の行を印刷します。

指示:

cut区切り文字がフィールドに文字として表示される場合、問題が発生します。

たとえば、

"field1","field2,stillfield2","field3"

cutカンマが"field2,stillfield2"フィールドの一部であることは理解できません。

ファイルが次のような場合は、csv処理機能を備えたプログラミング言語を使用するのが最善です。例えばPython

おすすめ記事