複数のtxtファイルから重複行を削除する[閉じる]

複数のtxtファイルから重複行を削除する[閉じる]

フォルダにはすべて12個のテキストファイルがあり、各ファイルには約500万行があり、各ファイル自体に重複行はありませんが、複数のファイルに重複行があります。各ファイルから重複行を削除したいのですが、まだ保存中です。私は多くのLinuxソートコマンドを試しましたが、ファイルを継続的にマージします。私はWindows、Linus、Macを使用しています。これを実行できるコードやアプリケーションはありますか?

ベストアンサー1

すべての重複エントリを削除しますが、ファイル内の最初の重複エントリを保持し、他のファイルから削除するには、次のようにawkを使用できます。これにより、行の順序も維持されます。

awk '!seen[$0]++ { print >FILENAME".new" }' file1 file2 ... file12

これには最大12個のファイルがあるため、awkを介して開いているファイルを閉じる必要はありませんが、処理して完了した後でも各ファイルを閉じることができます。

awk '!seen[$0]++ { 
    if(prev!=FILENAME) close(prev".new");
    print >FILENAME".new";
    prev=FILENAME }
' file1 file2 ... file12

シェルと外部コマンドを使用して、出力mvファイルの名前を元の名前に変更できます。renameコマンドも同様です。)

for file in ./*.new; do echo mv -v -- "$file" "${file%.new}"; done

注:echo結果に満足したら削除してください。


GNU awkがある場合は、-i inplaceオプションを使用して次のようにファイルを変更し、コマンド全体を簡素化できます。

gawk -i inplace '!seen[$0]++' file1 file2 ... file12

おすすめ記事