A string -12jo
, ligeiramente enigmática, refere-se às quatro opções separadas -1
, -2
, -j
e -o
, das quais as três primeiras têm a ver com a seleção de qual campo em cada arquivo e o último tem a ver com quais campos de cada arquivo devem ser produzidos. A opção -j
é uma extensão no GNU join
ee -j n
é o mesmo que -1 n -2 n
(onde n
é algum inteiro).
A opção -e
entra em vigor quando você, com -a
, solicita a obtenção de linhas desemparelhadas de um ou ambos os arquivos que você participa. Uma linha não pareada terá dados ausentes, já que a linha de um arquivo não corresponde a uma linha no outro arquivo. A opção -e
substitui esses campos pela string dada. Da mesma forma, se você solicitar, com -o
, um campo que não existe em uma determinada linha em um arquivo, você usaria -e
para substituir os valores vazios por uma string.
Exemplo: Dois arquivos que contêm custos de fabricação e receita de vendas para vários produtos. Cada arquivo tem os campos
- ID do produto
- Nome do produto
- Algum número
$ cat expenses.txt
1 teacup 5
2 spoon 7
3 bowl 10
$ cat sales.txt
1 teacup 30
2 spoon 24
Para obter as despesas e vendas de todos os produtos, enquanto substitui o número (do primeiro ou do segundo arquivo) que pode estar faltando com a string NONE
, eu faria
$ join -a1 -a2 -o0,1.2,1.3,2.3 -e NONE expenses.txt sales.txt
1 teacup 5 30
2 spoon 7 24
3 bowl 10 NONE
Aqui, eu uso a opção -a
duas vezes para solicitar todas as linhas de ambos os arquivos (uma "junção externa completa" no SQL speak). A opção -o
é usada para obter campos específicos de cada arquivo (campo 0
é o campo de junção, que é o primeiro campo em cada arquivo por padrão) e -e
para especificar a seqüência de caracteres NONE
para substituir ausente valor com.
Como você pode ver, obtemos NONE
como o "valor de vendas", pois o produto com o ID 3 não foi mencionado nesse segundo arquivo.