1. import java.io.*;
  2. import java.util.*;
  3. public class HeaderMerger {
  4. public static void main(String[] args) {
  5. if (args.length < 3) {
  6. System.out.println("Usage: java HeaderMerger <input1.txt> <input2.txt> <output.txt> [dry-run]");
  7. return;
  8. }
  9. String inputFile1 = args[0];
  10. String inputFile2 = args[1];
  11. String outputFile = args[2];
  12. boolean dryRun = false;
  13. if (args.length > 3 && args[3].equalsIgnoreCase("true")) {
  14. dryRun = true;
  15. }
  16. try {
  17. Map<String, Integer> headerCounts = new HashMap<>();
  18. // Read headers from the first file
  19. BufferedReader reader1 = new BufferedReader(new FileReader(inputFile1));
  20. String line;
  21. while ((line = reader1.readLine()) != null) {
  22. String[] parts = line.split(":", 2); // Split header and value
  23. if (parts.length == 2) {
  24. String header = parts[0].trim().toLowerCase(); // Normalize header
  25. headerCounts.put(header, headerCounts.getOrDefault(header, 0) + 1);
  26. }
  27. }
  28. reader1.close();
  29. // Read headers from the second file
  30. BufferedReader reader2 = new BufferedReader(new FileReader(inputFile2));
  31. while ((line = reader2.readLine()) != null) {
  32. String[] parts = line.split(":", 2);
  33. if (parts.length == 2) {
  34. String header = parts[0].trim().toLowerCase();
  35. headerCounts.put(header, headerCounts.getOrDefault(header, 0) + 1);
  36. }
  37. }
  38. reader2.close();
  39. // Merge the header counts
  40. Map<String, Integer> mergedHeaderCounts = new HashMap<>(headerCounts);
  41. for (Map.Entry<String, Integer> entry : headerCounts.entrySet()) {
  42. String header = entry.getKey();
  43. int count1 = entry.getValue();
  44. if (mergedHeaderCounts.containsKey(header)) {
  45. mergedHeaderCounts.put(header, mergedHeaderCounts.get(header) + count1);
  46. } else {
  47. mergedHeaderCounts.put(header, count1);
  48. }
  49. }
  50. // Write the merged headers to the output file
  51. BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
  52. for (Map.Entry<String, Integer> entry : mergedHeaderCounts.entrySet()) {
  53. writer.write(entry.getKey() + ": " + entry.getValue());
  54. writer.newLine();
  55. }
  56. writer.close();
  57. if (!dryRun) {
  58. System.out.println("Headers merged and saved to " + outputFile);
  59. } else {
  60. System.out.println("Dry run: Headers would be merged and saved to " + outputFile);
  61. }
  62. } catch (IOException e) {
  63. System.err.println("Error processing files: " + e.getMessage());
  64. }
  65. }
  66. }

Add your comment