escapando colchetes e outros caracteres no shell script

0

Eu executei o seguinte comando na linha de comando e ele funciona bem, mas quando tento executá-lo a partir de um shell script e executar o shell script do terminal, recebo o seguinte erro:

join -t $'\t' -a1 -e "u" -1 1 -2 1 -o 1.1,2.1,2.2 file1 \ <(cat file2 | sort -k1,1|tr [:blank:] \t ) | awk 'BEGIN {FS="\t";OFS="\t"}{if \($2 == "u")print $0, $1;else print $0, $3}' | awk '{gsub(/ /,"\t");l=$4; sub(/.*_/,"",l); print $2"\t"$3"\t"l}' > out

syntax error near unexpected token (''

Eu tentei escapar do suporte, mas ele ainda me causa o mesmo erro. Eu tenho muitos desses comandos multi-camadas no script, então tenho certeza que isso será um problema em outras partes, existe uma maneira de resolver isso?

    
por jamespower 04.12.2015 / 14:14

1 resposta

1

O que você perdeu é o ) na sua subcláusula stdin . O que eu suspeito que você ganhou é uma dor de cabeça tentando ler seu código.

Tente isso, o que se presta a otimização adicional porque é (mais) legível:

tr '[:blank:]' $'\t' <file2 |
    awk '
        BEGIN { FS="\t"; OFS="\t" }
        { if ($2 == "u") print $0, $1; else print $0, $3 }
    ' |
    awk '
        { gsub(/ /,"\t"); l=$4; sub(/.*_/,"",l); print $2 "\t" $3 "\t" l }
    ' |
    sort |
    join -t $'\t' -a1 -e "u" -1 1 -2 1 -o 1.1,2.1,2.2 file1 - >out
    
por 04.12.2015 / 14:33