summaryrefslogtreecommitdiff
path: root/and
diff options
context:
space:
mode:
authorjoeyh <joeyh>2006-03-06 03:33:23 +0000
committerjoeyh <joeyh>2006-03-06 03:33:23 +0000
commit6a7f34809e87a940cd30c7e9de160db4ee9e65ca (patch)
tree373ce8f5df8986dba781ec07635d797598449407 /and
parent31bab120cc259d70b3706dbd7210159b4667171d (diff)
downloadmoreutils-6a7f34809e87a940cd30c7e9de160db4ee9e65ca.tar.gz
releasing version 0.40.4
Diffstat (limited to 'and')
-rwxr-xr-xand50
1 files changed, 50 insertions, 0 deletions
diff --git a/and b/and
new file mode 100755
index 0000000..4165410
--- /dev/null
+++ b/and
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+and - print lines that are present in one file and another
+
+=head1 SYNOPSIS
+
+and file
+
+and [file|-] [file|-] ...
+
+=head1 DESCRIPTION
+
+B<and> reads the specified files and prints out the lines that are common
+to all files, in the order they are listed in the last file. Use "-" to
+make it read a file from standard input. If only one file is specified,
+B<and> first reads standard input, and compares it with the specified file.
+
+=head1 AUTHOR
+
+Copyright 2006 by Joey Hess <joey@kitenet.net>
+
+Licensed under the GNU GPL.
+
+=cut
+
+use warnings;
+use strict;
+
+if (@ARGV == 0) {
+ die "usage: and [file|-] [file|-] ...\n";
+}
+
+if (@ARGV == 1) {
+ unshift @ARGV, "-";
+}
+
+my %seen;
+foreach my $fn (@ARGV) {
+ open (IN, $fn) || die "and: read $fn: $!\n";
+ while (<IN>) {
+ chomp;
+ $seen{$_}++;
+ if ($seen{$_} == @ARGV) {
+ print "$_\n";
+ }
+ }
+ close IN;
+}