import java.io.*;
import java.util.*;
public class HeaderMerger {
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("Usage: java HeaderMerger <input1.txt> <input2.txt> <output.txt> [dry-run]");
return;
}
String inputFile1 = args[0];
String inputFile2 = args[1];
String outputFile = args[2];
boolean dryRun = false;
if (args.length > 3 && args[3].equalsIgnoreCase("true")) {
dryRun = true;
}
try {
Map<String, Integer> headerCounts = new HashMap<>();
// Read headers from the first file
BufferedReader reader1 = new BufferedReader(new FileReader(inputFile1));
String line;
while ((line = reader1.readLine()) != null) {
String[] parts = line.split(":", 2); // Split header and value
if (parts.length == 2) {
String header = parts[0].trim().toLowerCase(); // Normalize header
headerCounts.put(header, headerCounts.getOrDefault(header, 0) + 1);
}
}
reader1.close();
// Read headers from the second file
BufferedReader reader2 = new BufferedReader(new FileReader(inputFile2));
while ((line = reader2.readLine()) != null) {
String[] parts = line.split(":", 2);
if (parts.length == 2) {
String header = parts[0].trim().toLowerCase();
headerCounts.put(header, headerCounts.getOrDefault(header, 0) + 1);
}
}
reader2.close();
// Merge the header counts
Map<String, Integer> mergedHeaderCounts = new HashMap<>(headerCounts);
for (Map.Entry<String, Integer> entry : headerCounts.entrySet()) {
String header = entry.getKey();
int count1 = entry.getValue();
if (mergedHeaderCounts.containsKey(header)) {
mergedHeaderCounts.put(header, mergedHeaderCounts.get(header) + count1);
} else {
mergedHeaderCounts.put(header, count1);
}
}
// Write the merged headers to the output file
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
for (Map.Entry<String, Integer> entry : mergedHeaderCounts.entrySet()) {
writer.write(entry.getKey() + ": " + entry.getValue());
writer.newLine();
}
writer.close();
if (!dryRun) {
System.out.println("Headers merged and saved to " + outputFile);
} else {
System.out.println("Dry run: Headers would be merged and saved to " + outputFile);
}
} catch (IOException e) {
System.err.println("Error processing files: " + e.getMessage());
}
}
}
Add your comment