とあるファイルから、重複行を削除したいケース、よくありますよね。
そんなときに0からプログラムを書くこともできますが、プログラムを書くこと自体は目的ではないので、ChatGPTにお願いしてしまいましょう。
質問
phpでファイルから重複行を削除するプログラムを書いてください。
回答
以下は、PHPでファイルから重複行を削除するプログラムの例です。
<?php // ファイルのパス $filePath = 'path/to/your/file.txt'; // ファイルを読み込んで配列に格納する $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 重複行を削除する $uniqueLines = array_unique($lines); // 新しいファイルに結果を書き込む $newFilePath = 'path/to/your/new_file.txt'; file_put_contents($newFilePath, implode(PHP_EOL, $uniqueLines)); echo "重複行を削除しました。\n"; ?>
上記のコードでは、まず指定したファイルをfile()関数を使って読み込み、配列$linesに格納します。次に、array_unique()関数を使って重複行を削除し、結果を$uniqueLinesに格納します。最後に、file_put_contents()関数を使用して新しいファイルに結果を書き込みます。
上記のコードを実行すると、重複行が削除された新しいファイルが生成されます。新しいファイルのパスは$newFilePathで指定されています。
注意: プログラムを実行する前に、$filePathと$newFilePathを適切なファイルパスに変更してください。また、対象のファイルが大きすぎる場合はメモリ不足の問題が発生する可能性があるので、その場合は別のアプローチを検討する必要があります。
サクッと書いてくれました。実行環境を用意するのが面倒だったので、phpで書いてもらいました。ただもちろんシェルスクリプトで書くこともできますよね。
質問
シェルスクリプトで書くとどうなりますか?
回答
以下は、シェルスクリプトでファイルから重複行を削除するプログラムの例です。
#!/bin/bash # ファイルのパス file_path="path/to/your/file.txt" # 重複行を削除した一時ファイルのパス temp_file="path/to/your/temp_file.txt" # 重複行を削除する sort -u "$file_path" > "$temp_file" # 一時ファイルを元のファイルに上書きする mv "$temp_file" "$file_path" echo "重複行を削除しました。"
上記のスクリプトでは、sort -uコマンドを使用してファイル内の重複行を削除しています。重複行を削除した結果は一時ファイルに保存され、mvコマンドを使用して元のファイルに上書きします。
スクリプトを実行する前に、file_pathとtemp_fileのパスを適切なファイルパスに変更してください。
このスクリプトは、シェルスクリプトとして実行するため、実行する際にはスクリプトに実行権限を与える必要があるかもしれません(chmod +x script.sh)。また、注意点として、元のファイルは上書きされるため、必要な場合は事前にバックアップを取得することをおすすめします。