非常に大きなファイルから重複排除()

非常に大きなファイルから重複排除()

この入力ファイルには4つの列があります。重複したアイテムを削除する必要がありますが、問題があります。優先順位はC2> C3> C4です。したがって、出力には1つの行、つまりaそれぞれe1と1の行があります。hg

すべて一つC1a統合されました。その後、二人はek一つにまとめられた。そしてそれは別です。efemhg

C1 C2 C3 C4
t a b c
t a b d
t a e
t   e k
t a   i
t   e f
t   e m
t     h
t     g


Output:
t a b c
t   e k
t     h
t     g

次のコマンドを試しました。

awk '!seen[$2]++' ac.txt 私の問題:C2 C3とC4の間に多くの列があります。試してみましたが、 awk -F$'\t' '{ print $13 " " $18 " " $1 }' originalFile | awk '!seen[$2]++'これらの列が削除された重複行のみが提供されます。ファイル全体(すべての列)の重複を削除したいと思います。また、別の制限があります。ファイルサイズは最大200GBまで可能です。したがって、列を削除するのは十分なアプローチではないようです。

私はLinuxを使用しています。

ベストアンサー1

これは「0」列を空の列として扱いますが、より簡単なアイデアを提供します。

awk 'A[$c2] + B[$c3] + C[$c4]==0; 
    c2{A[$c2]++; next} c3{B[$c3]++;next} c4 {C[$c4]++}
' c2=2 c3=3 c4=4 input

(c2、c3、c4を関心のある実際の列番号に設定)

これをあなたのケースに拡張するには、次のものが利用可能である必要があります。

awk 'A[$c2] + B[$c3] + C[$c4]==0;
    match($c2,"[^ ]"){A[$c2]++; next}
    match($c3,"[^ ]"){B[$c3]++;next}
    match($c4,"[^ ]"){C[$c4]++}
' FS=\\t c2=2 c3=3 c4=4 input

おすすめ記事