awk com variáveis em condição e no arquivo de redirecionamento de saída

2

Por favor, gostaria de alguma ajuda com este comando, porque eu não encontrei nada na documentação que possa cobrir tudo o que eu quero.

Eu tenho algumas variáveis que são globais, então eu preferiria mantê-las fora do awk.

    chr="chr10"
    inpfile="exome.bed"
    outfile="exons_chr.bed" -> which should be composed according to chr,
                               so: "exons_" $chr ".bed"

e eu quero aplicar o awk de uma forma geral, para que, para qualquer entrada "chr" pelo usuário e qualquer "infile", eu possa ter um comando de uma linha apenas para criar uma saída de acordo com a seguinte condição:

    awk '$1=="$chr" $infile > "exons_"$chr".bed"

Então, eu também quero compor o nome do arquivo de saída a cada vez. Quando eu corro com valores específicos, funciona. Como posso fazer funcionar com variáveis, para ser mais geral, para que eu possa usá-lo em um script?

Existe uma maneira de fazer isso em mais linhas, como:

    awk ' { if ($1=="$chr") -> copy lines to outfile }' infile
    
por MariaK 18.03.2015 / 14:32

1 resposta

3

Você tem várias opções ...

Para passar as variáveis shell ao awk e usá-las na comparação de strings e deixar o shell criar o arquivo:

awk -v chr="$chr" '$1==chr' "$infile" > "exons_${chr}.bed"

Além disso, deixe o awk fazer a saída no arquivo:

awk -v chr="$chr" '$1==chr { print > "exons_" chr ".bed" }' "$infile"
    
por 18.03.2015 / 14:54