2番目の列数に基づいて最初の列から最初のn文字を選択する方法

2番目の列数に基づいて最初の列から最初のn文字を選択する方法

私のワークフローで次のファイルを作成しました。

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

最初の列の各テキストで、2番目の列の最初の文字数を選択したいと思います。たとえば、最初の行の最初の8文字、2行目の最初の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

(GNUはsedスクリプトファイルから読むことができるからです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 

関連情報