O que significa 'join -e'?

1

Do manual do coreutils sobre join

-e string

Replace those output fields that are missing in the input with string. I.e., missing fields specified with the -12jo options.

Eu não entendo a opção. O que o seguinte significa

  • "os campos de saída que estão faltando na entrada"

  • "campos ausentes especificados com as opções -12jo"?

Obrigado.

    
por Tim 24.07.2018 / 06:38

1 resposta

2

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

  1. ID do produto
  2. Nome do produto
  3. 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.

    
por 24.07.2018 / 08:39