如何根据第二列的编号从第一列中选​​择第 n 个字符

fus*_*ope 5 text-processing

在我的工作流程中,我创建了这个文件:

AAGGAGGGAGCTGCATGGAACCTGTGGATATATACACACAAGGTTAACCTCTGTCCTGTAAA  8  
GGAGTTCAGATGTGTGCTCTTCCGATCTGGAGGTCTCTGCTGGGGCCACCCTGTCCTCTCAG  30     
GAGAGAGGAAAGGAAGCGATTGCAGAACTTTCCACAAGGCTTTAGATTCCCCTGTCACAGAG  15  
GGAGGAGAAAGAATCAACTTTATAGCATCAGCCCCTTGTTTATTTTAAGTTCAGGGTTTAAG  13  
GGGAGAACATTTCCCTCCTTGTCCTCTCCTATCTCACTTACTACATTCCCACTGGTCACTGT  7  
GGGACATTTGTGATTACATGGTTGCAGTATTCTTTTTGTTCTTAGTCAGACTGTATAATTGG  4  
Run Code Online (Sandbox Code Playgroud)

我想从第一列的每个文本中选择第二列数量中存在的第一个字母数。如第一行的前 8 个字符,第二行的前 30 个字符等。

像第一个例子一样,输出将是这样的:

AAGGAGGG  
GGAGTTCAGATGTGTGCTCTTCCGATCTGG
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激。

Sat*_*ura 7

awk

awk '{ $0 = substr($1, 0, $2) } 1' file.txt
Run Code Online (Sandbox Code Playgroud)

使用 GNU sed

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

(GNUsed因为它可以从 读取脚本文件stdin)。

perl

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

另一种方式perl

perl -lape '$_ = substr($F[0], 0, $F[1])' file.txt
Run Code Online (Sandbox Code Playgroud)