awk
é provavelmente a melhor ferramenta para o trabalho.
Uma solução simples, semelhante a uma já dada,
mas que realmente usa os parâmetros que você especificou, é:
awk '$1=="chr4" && $2>=3 && $2<=7'
Você pode preferir uma solução mais geral,
o que envolve colocar o comando awk
em um script de shell, é:
#!/bin/sh
if [ "$#" -lt 3 ]
then
echo "Usage: $0 chromosome low_position high_position"
exit 1
fi
chr="$1"
lo="$2"
hi="$3"
shift 3
awk -vchromo="$chr" -vpos1="$lo" -v pos2="$hi" '$1==chromo && $2>=pos1 && $2<=pos2' "$@"
Se for executado com menos de três argumentos,
isso lembra quais devem ser os argumentos e sai.
Caso contrário, ele salva os três primeiros argumentos em variáveis de shell,
e, em seguida, desloca-os da lista de argumentos.
Em seguida, ele invoca awk
, passando os valores da variável shell como awk
variables.
Você pode invocar isso como qualquer um dos seguintes:
./myscript chr4 3 7 data
ou
./myscript chr4 3 7 < data
ou
(some_other_process) | ./myscript chr4 3 7
e, em qualquer caso, redirecione a saída para o novo arquivo com
>
.