【Linux】 ファイルの重複した行を削除して、ファイルを結合する方法。
大容量の CSV ファイルの重複した行を削除して、ファイルを結合する処理を行ったときのメモです。
かなり大きいサイズのファイルなので、Python を使うと処理がかなり重くなってしまったので、Linux のコマンドで対応しました。
ファイルの重複行を削除
ファイルの重複した行を削除するには「uniq」コマンドを用います。
重複した行を削除して1行に集約してくれます。
1 |
uniq 入力ファイル名 出力ファイル名 |
ただし、これだと前後の行しか比較しないので、行を飛んで重複しているものは削除されません。
なので、uniq の前に「sort」コマンドを使用します。
1 |
sort 入力ファイル名 | uniq > 出力ファイル名 |
実行すると、以下のようなエラーが出ました。
sort: write failed: /tmp/sortL1jRr2: No space left on device
メモリが足りないということのようなので、ランダムに抽出しファイルの容量を減らしてから実行しました。
元のファイルからランダムに行を抽出するには「shuf」コマンドを用います。
1 |
shuf -n 50000 入力ファイル名 > 出力ファイル名 |
「-n」オプションで抽出する行数を指定します。今回は 5万行を指定しています。
ファイルを結合する
最後に、ファイルの結合を行いました。
今回は2ファイルの結合だったのですが、いくつでも可能だと思います。
「cat」コマンドを用います。
1 |
cat ファイル1 ファイル2 > 出力ファイル名 |
関連記事
-
-
【Linux】cp コマンドでディレクトリごとコピーし、ファイルの上書き確認されないようにする方法
Linux で cp コマンドを使って、ディレクトリごとコピーし、同一ファイル名があった場合に上書き
-
-
【Linux】文字化け対策に unar のインストールを試みた。
Windows で圧縮したファイルを Linux で解凍すると、文字化けが起こってしまいます。文字化
-
-
【Linux】SSH でリモートからログインする方法。
SSH(Secure Shell)は、暗号化され、安全にリモートホストにログインするためのプロトコル
-
-
【Linux】ファイルの文字コードを一括変換する方法|EUC-JP ⇒ UTF-8
Linux で、あるディレクトリ内のファイルの文字コードを EUC-JP から UTF-8 に一括変
-
-
【Linux】ファイルの行数をカウントし、行数指定でファイル分割する方法。
Linux のコマンドを使って、ファイルの行数をカウントし、行数を指定してファイルを分割したときのメ
-
-
【WSL】Windows10 に Linux(Ubuntu) を入れてみた。
最新の Windows10 環境であれば、簡単に Linux 環境を構築できるということで、試してみ
-
-
【Linux】SSH を切断した後でも Python を実行し続ける方法|nohub
今回、Linux のサーバに Windows から TeraTerm で SSH 接続し、Pytho
-
-
大量のテキストファイルを圧縮して Windows から Linux へコピーして解凍してみた。
大量のテキストファイルを Windows から Linux にコピーする必要があり、最初はそのまま
-
-
【Linux】ファイルの文字コードを調べる方法
Linux でファイルの文字コードを調べる必要があったので、その時のメモです。 いくつか方法が
-
-
【Linux】WinSCP で Windows からファイルをコピーする方法。
今回は、WinSCP というソフトを使って、Windows から GUI で Linux のサーバに