]> err.no Git - moreutils/commitdiff
releasing version 0.4 0.4
authorjoeyh <joeyh>
Mon, 6 Mar 2006 03:33:23 +0000 (03:33 +0000)
committerjoeyh <joeyh>
Mon, 6 Mar 2006 03:33:23 +0000 (03:33 +0000)
Makefile
README
and [new file with mode: 0755]
debian/changelog
debian/control
debian/copyright
not [new file with mode: 0755]

index 5e67318f9f05ebddfdd161395e9c9242dff00508..d9505956d060d8fdd7796eeea604fe2069665030 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 BINS=isutf8 sponge
-PERLSCRIPTS=vidir vipe ts
-MANS=sponge.1 vidir.1 vipe.1 isutf8.1 ts.1
+PERLSCRIPTS=vidir vipe ts and not
+MANS=sponge.1 vidir.1 vipe.1 isutf8.1 ts.1 and.1 not.1
 CFLAGS=-O2 -g -Wall
 
 all: $(BINS) $(MANS)
diff --git a/README b/README
index 6b0ea37c1a81575909bf5fa5552b72bdd358c284..96c522296869498c0a58f47078f0d2e6e26b5dc8 100644 (file)
--- a/README
+++ b/README
@@ -11,6 +11,11 @@ vidir
        edit a directory in your text editor
 vipe
        edit a pipe using your text editor
+and
+       print lines that are present in one file and another
+not
+       print lines that are present in one file but not another
+
 
 Your suggestions of additional tools to add to this collection are
 apprecitated. Here are some that are under consideration but have not yet
@@ -27,18 +32,6 @@ ifcfg
        http://edgard.dyn.fdn.fr/developpements/ifcfg.shtml
        (Tarball link 404 when last checked.)
 
-and
-       filter a stream for the entries that exist in another file
-       http://arstechnica.com/articles/columns/linux/linux-20050822.ars
-
-       (Isn't there a way to do this with standard unix tools?)
-
-not
-       filter a stream for the entries that do not exist in another file
-       http://arstechnica.com/articles/columns/linux/linux-20050822.ars
-       
-       (Isn't there a way to do this with standard unix tools?)
-
 z
        makes another program understand compressed files
        ex: z zxgv file.bmp.gz
diff --git a/and b/and
new file mode 100755 (executable)
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;
+}
index cbec1db35a27397b699694fac5e3ab51d489b482..7777952d2e5d61eca2b2288eb2bb090cbad98865 100644 (file)
@@ -1,3 +1,10 @@
+moreutils (0.4) unstable; urgency=low
+
+  * Added versions of and(1) and not(1) that support arbitrary numbers of
+    input files.
+
+ -- Joey Hess <joeyh@debian.org>  Sun,  5 Mar 2006 22:28:13 -0500
+
 moreutils (0.3) unstable; urgency=low
 
   * Switch sponge to a C implementation by mithandir.
index 468537981110a7d96a7e25ad8c93eebc0dbde42f..1a98b9ef13aba2b410436e37f0b3e0dd6e466a10 100644 (file)
@@ -18,3 +18,6 @@ Description: additional unix utilities
   - ts: timestamp standard input
   - vidir: edit a directory in your text editor
   - vipe: edit a pipe using your text editor
+  - and: print lines that are present in one file and another
+  - not: print lines that are present in one file but not another
+               
index dc623781401787adc7d618f94e293ed3ffd1be74..6718bac8d2bdd43d6b90aa8d82d63cb6bf555168 100644 (file)
@@ -5,7 +5,7 @@ isutf8 is Copyright (C) 2005 by Lars Wirzenius, under the terms of
 the GPL.
 
 spong is Copyright (C) 2006 by Tollef Fog Heen, under the terms of
-the GPL version 2.
+the GPL version 2. Name and concept by Colin Watson.
 
 Everything else is copyright 2006 by Joey Hess, under the terms of GPL.
 The full text of the GNU GPL can be found in /usr/share/common-licenses/GPL
diff --git a/not b/not
new file mode 100755 (executable)
index 0000000..c67467c
--- /dev/null
+++ b/not
@@ -0,0 +1,57 @@
+#!/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<not> 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<not> 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: 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 (<IN>) {
+               chomp;
+               $seen{$_}++;
+       }
+       close IN;
+}
+
+
+open (IN, $first) || die "and: read $first: $!\n";
+while (<IN>) {
+       chomp;
+       print "$_\n" if ! $seen{$_};
+}
+close IN;