Problema de junção: erro de lançamento, junte operando extra

2

Eu quero juntar 3 arquivos em uma coluna que classificou valores numéricos únicos (esses arquivos têm apenas uma coluna de valores) e começa com o mesmo prefixo para um exemplo "usi".

Agora, enquanto estou fazendo isso

join -j 1 ../Test_Data/usi* > ../Test_Data/join_output.txt

Estou encontrando o seguinte erro:

join: extra operand 'usi_rtree_lw_100000.txt'
Try 'join --help' for more information.

Alguma idéia?

    
por MiNdFrEaK 22.10.2012 / 05:45

2 respostas

3

join aceita apenas 2 arquivos para participar. Para operar em 3 arquivos, você precisa usar 2 join chamadas:

join -j 1 <(join -j 1 ../Test_Data/usi-1 ../Test_Data/usi-2) ../Test_Data/usi-3 > ../Test_Data/join_output.txt

O comando acima requer bash , como usa a substituição do processo. Se você usa outro shell, especifique qual.

Atualizar de acordo com o comentário.
Se você conhece apenas um padrão de nome de arquivo em vez de nomes de arquivo exatos, deixe o shell expandir o padrão, capture a lista expandida em uma matriz e use os elementos da matriz como parâmetros:

file=(../Test_Data/usi*)
join -j 1 <(join -j 1 "${file[0]}" "${file[1]}") "${file[2]}"
    
por 22.10.2012 / 08:30
0

POSIX variantes do shell da resposta do manatwork :

  1. printf '"%s" ' ../Test_Data/usi* | { read a b c ; join $a $b | join - $c ; }

  2. set -- ../Test_Data/usi* ; join "$1" "$2" | join - "$3"

por 18.11.2018 / 22:00