join command option for generating tab-delimited file

When we want to join two files by a same key into one file, we can use join command. We can join lines by a first column value of tab-delimited files.

join -j 1 file1 file2

Indeed, join command itself is very useful, default output is not tab-delimited text, but space-delimited text. It is not good for us because most of data are tab-delimited. I just noticed an option for tab-delimited output.

join -j 1 -t "$(printf '\011')" file1 file2

It is required that files to join must be sorted. If not so, error will occur.

join: file1:7: is not sorted

Two files must be sorted like this.

sort -u file1 > file1s
sort -u file2 > file2s

By adding -u option, we can delete redundant lines.

Moreover, key for join must be unique. I could not overcome this restriction, and I wrote ad hoc Perl script for that.


Written by bonohu in shell on 金 15 6月 2018.