Como imprimir o separador para todos os campos no utilitário de junção?

2

Por exemplo:

arquivo a:

Tom:black
Lily:pink

arquivo b:

Tom:big
Kate:small

E o resultado:

join -t: a1 a b

Tem:

Tom:black:big
Lily:pink

Mas o que eu quero é:

Tom:black:big
Lily::pink

i.e. O cólon na última linha está faltando, alguma idéia?

    
por Xiè Jìléi 13.12.2010 / 02:24

2 respostas

1

Eu acho que você gostaria que os campos estivessem em uma posição consistente. Em caso afirmativo, um deles funcionaria usando apenas uma invocação de join e nenhum sed :

$ join -t: -a1 -o 1.1,1.2,2.2 a b
Tom:black:big
Lily:pink:
$ join -t: -a1 -o 1.1,2.2,1.2 a b
Tom:big:black
Lily::pink
    
por 13.12.2010 / 07:28
1

Esse comportamento é esperado por man join :

   -a FILENUM
          print unpairable lines coming from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2

Você pode fazer isso em dois passes assim:

join -t: a b && join -t: -v1 a b|sed 's/:/::/'

ou algo nesse sentido.

    
por 13.12.2010 / 02:33

Tags