use std::env; use std::fs::File; use std::io::{self, BufRead, BufReader}; use std::collections::HashSet; use std::hash::{Hash, Hasher}; use std::collections::hash_map::DefaultHasher; fn main() -> io::Result<()> { let args: Vec = env::args().collect(); if args.len() > 1 { for filename in &args[1..] { let file = File::open(filename)?; let reader = BufReader::new(file); remove_duplicates(reader)?; } } else { // No files provided, read from stdin let stdin = io::stdin(); let reader = stdin.lock(); remove_duplicates(reader)?; } Ok(()) } fn remove_duplicates(reader: R) -> io::Result<()> { let mut seen_hashes = HashSet::new(); for line in reader.lines() { let line = line?; let mut hasher = DefaultHasher::new(); line.hash(&mut hasher); let hash = hasher.finish(); if seen_hashes.insert(hash) { println!("{}", line); } } Ok(()) }