[log in to unmask] wrote:
>
> hi all,
> I have two file of similar structure and content, I want to compare both
> the file and pass the rows that are different from one of the file onto a third
> file.
If both input files are sorted on a common key, the POSIX join command's -v
option can do this for you, i.e.:
join -v 1 file1 file2 >file3
- Mark B.
join(1) MPE/iX Shell and Utilities join(1)
______________________________________________________________________
NAME
join -- join two sorted, textual relational databases
SYNOPSIS
join [-a n] [-e s] [-o list] [-t c] [-v n] [-1 n] [-2 n] file1 file2
join [-a n] [-e s] [-j[n] m] [-o list] [-t c] file1 file2
DESCRIPTION
join joins two databases. It assumes that both file1 and file2
contain textual databases in which each input line is a record and
that the input records are sorted in ascending order on a particular
join key field (by default the first field in each file). If you
specify - in place of file1 or file2, join uses the standard input for
that file.
Conceptually, join computes the Cartesian product of records from both
files. By default, spaces or tabs separate input fields and join
discards any leading or trailing white space. (There can be no white-
space delimited empty input fields.) It then generates output for
those combined records in which the join key field (the first field by
default) matches in each file. The default output for join is the
common join key field, followed by all the other fields in file1, and
then all the other fields in file2. The other fields from each file
appear in the same order they appeared in the original file. The
default output field separator is a space character.
Options
join accepts the following options:
-a n produces an output line for lines that do not match in addition
to one for a pair of records that do match. If you specify n as
one of 1 or 2, join produces unpaired records from only that
file. If you specify both -a 1 and -a 2, it produces unpaired
records from both files.
-e string
replaces empty fields (selected by -o) with string on output.
-j[n] m
uses field number m as the join key field. By default, the join
key field is the first field in each input line. As with the -a
option, if n is present, this option specifies the key field just
for that file; otherwise, it specifies it for both files.
-o list ...
specifies the fields to be output. You can specify each element
in list as either n.m where n is a file number (1 or 2) and m is
a field number, or as 0 (zero), which represents the join field.
You can specify any number of output fields by separating them
with blanks or commas. The POSIX-compatible form (listed first
in SYNOPSIS) requires that you specify multiple output fields as
a single argument; therefore shell quoting may be necessary.
join outputs the fields in the order you list them.
1
join(1) MPE/iX Shell and Utilities join(1)
______________________________________________________________________
-t c sets the field separator to the character c. Each instance of c
introduces a new field, making empty fields possible.
-v n suppresses matching lines. If you specify n as one of 1 or 2,
join produces unpaired records from only that file. If you
specify both -v 1 and -v 2, it produces unpaired records from
both files. This does not suppress any lines produced using the
-a option.
-1 n uses the nth field of file1 as the join key field.
-2 n uses the nth field of file2 as the join key field.
|