#!/usr/bin/perl =head1 NAME not - print lines that are present in one file but not another =head1 SYNOPSIS not file not [file|-] [file|-] ... =head1 DESCRIPTION B reads the specified files and prints out the lines that are present in the first but not in subsequent files. Use "-" to make it read a file from standard input. If only one file is specified, B first reads standard input, and compares it with the specified file. =head1 AUTHOR Copyright 2006 by Joey Hess Licensed under the GNU GPL. =cut use warnings; use strict; if (@ARGV == 0) { die "usage: not [file|-] [file|-] ...\n"; } if (@ARGV == 1) { unshift @ARGV, "-"; } my $first=shift; my %seen; foreach my $fn (@ARGV) { open (IN, $fn) || die "and: read $fn: $!\n"; while () { chomp; $seen{$_}++; } close IN; } open (IN, $first) || die "and: read $first: $!\n"; while () { chomp; print "$_\n" if ! $seen{$_}; } close IN;