ファイル内の重複レコードのみを識別し、重複レコードのみを新しいファイルに印刷する

ファイル内の重複レコードのみを識別し、重複レコードのみを新しいファイルに印刷する

私のCSVファイルには、列1、3、4に重複レコードがある10個の列がたくさんあります。これらの重複履歴は識別され、別々のTXTファイルに保存されなければなりません。ファイルは「,」で区切られます。

たとえば、

14479305,I,101013000000,I,31/03/2019,TD01,16573.34,0,C,6/03/2015
14479305,I,101013000000,I,31/03/2019,TD01,16573.34,0,C,6/03/2015
14479305,I,101013000000,I,31/03/2019,TD01,6591.5,0,O,23/03/2015
14479305,I,101013000000,I,31/03/2019,TD01,305592.33,0,C,27/07/2017
13256433,I,101095000000,I,31/03/2019,TD21,102992.06,0,C,20/03/2017
13256492,I,101095000000,I,31/03/2019,TD21,102992.06,0,C,20/03/2017
11595044,I,101225000000,I,31/03/2019,TD01,70000,0,O,14/10/2016
13222989,I,101296000000,I,31/03/2019,TD01,53850,0,O,21/09/2018
13222989,I,101296000000,I,31/03/2019,TD01,534850,0,O,21/09/2019

結果ファイル

14479305,I,101013000000,I,31/03/2019,TD01,16573.34,0,C,6/03/2015
14479305,I,101013000000,I,31/03/2019,TD01,6591.5,0,O,23/03/2015
14479305,I,101013000000,I,31/03/2019,TD01,305592.33,0,C,27/07/2017
13222989,I,101296000000,I,31/03/2019,TD01,53850,0,O,21/09/2018
13222989,I,101296000000,I,31/03/2019,TD01,534850,0,O,21/09/2019

私が書いたがうまくいかなかったAWKコマンドは次のとおりです。

awk -F, 'dups{a[$1,$3,$4]++; next} a[$1,$3,$4]>1' source.CSV > Dups.txt

アドバイスしてください

ベストアンサー1

ほぼ全部来ました!入力ファイルを2回(一部の修正を含む)処理するだけです。最初は条件(列#1、#3、#4)に基づいて重複数を探し、2番目はcount>を持つその行の出力ファイルをフィルタリングする必要があります。 1だから:

awk -F, 'NR==FNR{ dups[$1,$3,$4]++; next} dups[$1,$3,$4]>1' source.CSV source.CSV > Dups.txt

おすすめ記事