在我的工作流程中,我创建了这个文件:
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)
任何想法将不胜感激。
与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)