como selecionar n primeiros caracteres da primeira coluna de acordo com o número da segunda coluna

5

Durante meu fluxo de trabalho, criei este arquivo:

AAGGAGGGAGCTGCATGGAACCTGTGGATATATACACACAAGGTTAACCTCTGTCCTGTAAA  8  
GGAGTTCAGATGTGTGCTCTTCCGATCTGGAGGTCTCTGCTGGGGCCACCCTGTCCTCTCAG  30     
GAGAGAGGAAAGGAAGCGATTGCAGAACTTTCCACAAGGCTTTAGATTCCCCTGTCACAGAG  15  
GGAGGAGAAAGAATCAACTTTATAGCATCAGCCCCTTGTTTATTTTAAGTTCAGGGTTTAAG  13  
GGGAGAACATTTCCCTCCTTGTCCTCTCCTATCTCACTTACTACATTCCCACTGGTCACTGT  7  
GGGACATTTGTGATTACATGGTTGCAGTATTCTTTTTGTTCTTAGTCAGACTGTATAATTGG  4  

Eu gostaria de selecionar de cada texto da primeira coluna o primeiro número de letras como presente no valor da segunda coluna. Como primeiro 8 caracteres da primeira linha, primeiro 30 caracteres da segunda linha, etc.

Como o primeiro exemplo, a saída seria algo assim:

AAGGAGGG  
GGAGTTCAGATGTGTGCTCTTCCGATCTGG

Qualquer ideia seria muito apreciada.

    
por fusion.slope 29.08.2016 / 19:21

2 respostas

7

com awk :

awk '{ $0 = substr($1, 0, $2) } 1' file.txt

Com o GNU sed :

sed -r 's/.* ([0-9]+).*/s!^(.{}).*!\1!/' file.txt | \
    cat -n | \
    sed -r -f - file.txt

(GNU sed porque pode ler arquivos de script de stdin ).

com perl :

perl -lpe 's/.*?([ACTG]+)\s+(\d+).*/ substr($1, 0, $2)/e' file.txt

Outra maneira com perl :

perl -lape '$_ = substr($F[0], 0, $F[1])' file.txt
    
por 29.08.2016 / 19:58
1

Sem sed:

while read -r d n;do echo ${d:0:$n};done < file.txt 
    
por 29.08.2016 / 19:24