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

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

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

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

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

与第一个示例一样,输出将如下所示:

AAGGAGGG  
GGAGTTCAGATGTGTGCTCTTCCGATCTGG

任何想法都会非常感激。

答案1

awk

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

使用 GNU sed

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

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

perl

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

另一种方式perl

perl -lape '$_ = substr($F[0], 0, $F[1])' file.txt

答案2

没有 sed:

while read -r d n;do echo ${d:0:$n};done < file.txt 

相关内容