você está executando sua transformação NF vezes para cada linha. Sua entrada tem dois campos, então duplica cada linha de sua saída.
Tente remover completamente o loop for e verifique se o resultado é o desejado.
Eu tentei escrever um forro no awk para converter um arquivo de duas colunas em três colunas.
i.e. chr name & posição inicial - > chr name & if (Start > 2000), em seguida, inicie -2000; mais 0 & posição inicial
Então eu escrevi o comando abaixo.
for i in 'ls *.startlist'; do
name='basename $i .startlist';
awk -vOFS="\t" '{for (i=1; i<= NF; i++) { if($2 < 2000) { print $1,0,$2} else {print $1,$2-2000,$2 } }}' $i >${name}_promoter.bed;
done
mas isso imprime todas as linhas duas vezes. Você pode sugerir o erro. e também sugerir se você tem uma maneira melhor e mais rápida para o mesmo.
você está executando sua transformação NF vezes para cada linha. Sua entrada tem dois campos, então duplica cada linha de sua saída.
Tente remover completamente o loop for e verifique se o resultado é o desejado.
Se o arquivo de entrada tiver duas colunas, haverá dois campos em cada registro (NF é 2) e o loop for será executado para i = 1 ei = 2 e cada vez que uma impressão for chamada.
'{for (i=1; i<= NF; i++) { if($2 < 2000) { print $1,0,$2} else {print $1,$2-2000,$2 } }}'
Basta remover o loop.
Tags awk sed scientific-linux