I have two files where I want to perform union operation
based on 1st column:
file1.txt
foo 1
bar 2
qux 3
file2.txt
foo x
qux y
boo z
The result I hope to get is like this:
foo 1 x
bar 2 -
qux 3 y
boo - z
where the empty fields of column 1 is padded
with “-“.
But why this join command doesn’t work as I expected?
$ join -a1 -a2 -e"-" file1.txt file2.txt
What’s the right way to do it?
“Important: FILE1 and FILE2 must be sorted on the join fields.” (from this online manpage).
This problem #1. Problem #2 is worse: option
-eis badly documented — only works in conjunction with-o, so for example:where the
sprefix name indicated files that I’vesorted beforehand.Edit:
man joinexplains the-oswitch (so does the online manpage I point to above). It specifies the fields to output (1.2 means 2nd field from file 1, &c), or 0 to mean the join field, and is a comma-separated list. (I didn’t remember the 0 value, actually, so had originally given a clumsier solution requiring awk post-processing, but the current solution is better… and no awk needed!).