在我的工作流程中,我创建了这个文件:
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